【问题标题】:ValueError while running Python script from command line从命令行运行 Python 脚本时出现 ValueError
【发布时间】:2021-03-08 16:26:03
【问题描述】:

我正在尝试从命令行调用 python 脚本,如下所示:

python Browse_list.py "firefox" "https://www.n11.com/magaza/tozbitti?iw=motor"["&m=Aeg","&m=Arnica","&m=Bosch","&m =伊莱克斯","&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]'

如何解析字符串数组并将其更改为整数数组?谢谢。

【问题讨论】:

  • 您的错误消息清楚地表明您正在尝试将 '1,1,1,1,1]' 转换为 int... 在 a.split(',') 之后添加打印,您将看看你给循环和一个
  • 我做了并解决了错误,谢谢。
  • 在 Python 中,我们称它们为 lists,而不是 arraysw3schools.com/python/python_lists.asp :)

标签: python arrays string command-line integer


【解决方案1】:

问题在于您没有解析数据类型,因为命令行参数总是作为字符串传递。您需要将它们解析为所需的数据类型

不正确

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()

【讨论】:

    【解决方案2】:

    即使所有数组的大小相同,我也必须分别获取每个数组的长度,如下所示:

    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获取每个输入的方式不同,这使得长度不同,所以你每次都得到长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 2012-04-01
      • 1970-01-01
      相关资源
      最近更新 更多