[英]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.