在python中作为命令行参数传递的数字不会被解释为整数

时间:2012-05-25 09:34:31

标签: python argv

我熟悉C,并开始在python中进行实验。我的问题是关于sys.argv命令。我已经读过它用于命令行解释器,但是当我尝试执行一个简单的程序时,我没有得到我期望的结果。

代码:

import sys

a = sys.argv[1]
b = sys.argv[2]

print a, b

print a+b

输入:

python mySum.py 100 200

输出:

100 200
100200

当我添加两个参数时,它们被连接而不是两个值一起添加。似乎这些值被视为字符串。

我怎样才能将它们解释为数字?

6 个答案:

答案 0 :(得分:30)

您可以使用int()

将参数转换为整数
import sys

a = int(sys.argv[1])  b = int(sys.argv[2])

print a, b

print a+b

输入:python mySum.py 100 200

输出:

100 200
300

答案 1 :(得分:12)

您还应验证用户输入:

import sys

def is_intstring(s):
    try:
        int(s)
        return True
    except ValueError:
        return False

for arg in sys.argv[1:]:
    if not is_intstring(arg):
        sys.exit("All arguments must be integers. Exit.")

numbers = [int(arg) for arg in sys.argv[1:]]
sum = sum(numbers)

print "The sum of arguments is %s" % sum

答案 2 :(得分:11)

确实,您自己发现了问题,sys.argv是一个字符串数组。

您可以使用int()将字符串转换为整数。例如:a = int(sys.argv[1])

答案 3 :(得分:4)

sys.argv项始终为strings。你应该使用int将它们转换为int(a)

您还可以使用第三方库来处理CLI参数,例如OptParse

答案 4 :(得分:0)

在Python中,字符串不会隐式转换为整数。 尝试

num1 = int(sys.argv[1])
This would represent the numerical value of the number, not its string representation.

答案 5 :(得分:0)

谨防执行涉及命令行参数的比较,由于Python 2的策略用于比较不同类型的对象(' int&#39),这可能导致真正意外行为;<"' list'<' string'<' tuple'),如上所述here。在Python 3中,比较不同类型的对象将导致TypeError。

有关对象比较混乱的示例,请尝试删除第6.1.1节中的int()调用。在Python tutorial Fibonacci code中,你会得到一个无限循环,因为while循环条件变为:' int' < '串&#39 ;. (这不会发生在Perl,顺便说一下。)

来自@ Jan-Philip的很好的建议来验证命令行参数,即使对于Python 3也是如此。