簡體   English   中英

從命令行運行 Python 腳本時出現 ValueError

[英]ValueError while running Python script from command line

我正在嘗試從命令行調用 python 腳本,如下所示:

python Browse_list.py "firefox" "https://www.n11.com/magaza/tozbitti?iw=motor"["&m=Aeg","&m=Arnica","&m=Bosch","&m=Electrolux" ,"&m=飛利浦"] [1,1,1,1,1] [4,2,7,4,6] "&pg="

這是腳本文件:

import sys
import selenium
from selenium import webdriver
from time import sleep
import os

if sys.argv[1] == 'Chrome':

    driver = webdriver.Chrome(executable_path=os.getcwd() + '\\chromedriver.exe')

elif sys.argv[1] == 'Firefox':

    driver = webdriver.Firefox(executable_path=os.getcwd() + '\\geckodriver.exe')

elif sys.argv[1] == 'Microsoft Edge':

    driver = webdriver.Edge(executable_path=os.getcwd() + '\\msedgedriver.exe')

elif sys.argv[1] == 'Opera':

    driver = webdriver.Opera(executable_path=os.getcwd() + '\\operadriver.exe')

n = len(sys.argv[3])
s = sys.argv[3][1:n-1] 
s = s.split(',') 

a = sys.argv[4][1:n-1] 
a = a.split(',') 
  
A = [int(i) for i in a]

b = sys.argv[5][1:n-1] 
b = b.split(',') 
  
B = [int(i) for i in b]

for j in range(0, len(A)): 

    for i in range(A[j], B[j]):

        driver.get(sys.argv[2]+s[j]+sys.argv[6]+str(i))

        sleep(4)

#driver.quit()

我收到以下錯誤:

    Traceback (most recent call last):
      File "Browse_list.py", line 30, in <module>
        A = [int(i) for i in a]
      File "Browse_list.py", line 30, in <listcomp>
        A = [int(i) for i in a]
ValueError: invalid literal for int() with base 10: '1,1,1,1,1]'

如何解析字符串數組並將其更改為整數數組? 謝謝。

問題是您沒有解析數據類型,因為命令行 arguments 始終作為字符串傳遞。 您需要將它們解析為所需的數據類型

不正確

a = a.split(',') 
b = b.split(',') 

正確的

a = map(int, a.strip('[]').split(','))
b = map(int, b.strip('[]').split(','))

所以你的最終代碼看起來像:

import sys
import selenium
from selenium import webdriver
from time import sleep
import os
from webdriver_manager.chrome import ChromeDriverManager

if sys.argv[1] == 'Chrome':

    driver = webdriver.Chrome(executable_path=os.getcwd() + '\\chromedriver.exe')

elif sys.argv[1] == 'Firefox':

    driver = webdriver.Firefox(executable_path=os.getcwd() + '\\geckodriver.exe')

elif sys.argv[1] == 'Microsoft Edge':

    driver = webdriver.Edge(executable_path=os.getcwd() + '\\msedgedriver.exe')

elif sys.argv[1] == 'Opera':

    driver = webdriver.Opera(executable_path=os.getcwd() + '\\operadriver.exe')

n = len(sys.argv[3])
s = sys.argv[3][1:n-1] 
s = s.split(',') 

a = sys.argv[4][1:n-1] 
a = map(int, a.strip('[]').split(','))
  
A = [int(i) for i in a]

b = sys.argv[5][1:n-1] 
b = map(int, b.strip('[]').split(','))
  
B = [int(i) for i in b]
driver = webdriver.Chrome(ChromeDriverManager().install())
for j in range(0, len(A)): 

    for i in range(A[j], B[j]):

        
        driver.get(sys.argv[2]+s[j]+sys.argv[6]+str(i))

        sleep(4)

#driver.quit()

即使所有 arrays 的大小相同,我也必須分別獲取每個數組的長度,如下所示:

n = len(sys.argv[3])
s = sys.argv[3][1:n-1] 
s = s.split(',') 

n = len(sys.argv[4])
a = sys.argv[4][1:n-1]
a = a.split(',') 
  
A = [int(i) for i in a]

n = len(sys.argv[5])
b = sys.argv[5][1:n-1] 
b = b.split(',') 

也許 python 獲取每個輸入的方式不同,這使得長度不同,因此您每次都獲取長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM