-3
import sys

a =int( sys.argv[1])

print "\nArguments -->",a , sys.argv[2]

print "\nNo of Argu ",  len(sys.argv), "\n"

print str(sys.argv)

我给出的命令窗口输出是:

python testfunction.py a sf df sf

当evr第一个参数被视为'a'时,它会显示错误-->

invalid literal for int() with base 10: 'a'

python的新手。请提供有关如何处理此问题的解决方案,而无需尝试,除非

当我不给出蚂蚁论据时,我也应该处理

我给出的命令窗口输出:

python testfunction.py

错误:IndexError:列表索引超出范围

4

4 回答 4

5

我不太确定您是否知道自己在做什么,但让我为您澄清一下:

a =int( sys.argv[1])

您希望您的第一个参数是整数类型。显然情况并非如此,因为您使用以下参数调用脚本:

a sf df sf

Python 尝试将您的第一个参数转换为整数。哪个失败了。

一个简单的解决方法是确保第一个参数是一个整数:

if sys.argv[1].isdigit():
    a = int(sys.argv[1])
else:
    print "First argument is not a digit"
    sys.exit(1)

或者用 try except 块来包围这个(我会这样做)

try:
   a = int(sys.argv[1])
except ValueError:
   print "Stupid user, please enter a number"
   sys.exit(1)
于 2013-10-09T12:17:17.110 回答
3

您正在尝试a =int( sys.argv[1])从命令行获取"a"- 这不能使用基数 10 转换为整数 - 即它不是数字 0..9 !

要在不使用 try..except 的情况下处理此问题,您必须在调用 int() 之前检查 sys.argv[1] 中的所有字符是否都在 '0' 到 '9' 范围内。

于 2013-10-09T12:09:54.440 回答
1

int()接受一个基数作为第二个可选参数。

a = int(sys.argv[1], 16) # == 10

对于用户可能提供完全不是整数的东西的所有其他情况,您仍然必须处理异常。

于 2013-10-09T12:16:51.860 回答
0

没有try/except

if sys.argv[1].isdigit():
    a = int(sys.argv[1])
else:
    #do smth if arg is not a number
    pass

仅适用于正整数。

于 2013-10-09T12:14:21.957 回答