Numbers passed as command line arguments in python not interpreted as integers

女生的网名这么多〃 提交于 2019-11-28 10:44:31

You can convert the arguments to integers using int()

import sys

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

print a, b

print a+b

input: python mySum.py 100 200

output:

100 200
300

You also should validate the user input:

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

Indeed, you have found the problem yourself, sys.argv is an array of strings.

You can transform a string to an integer with int(). In this case for example: a = int(sys.argv[1])

Andy Terra

sys.argv items are always strings. you should cast them to int with int(a).

You can also use third party libraries for handling CLI arguments such as OptParse.

In Python, strings are not implicitly converted to integers. Try

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

Beware of performing comparisons involving command-line arguments, which can lead to really unexpected behavior owing to Python 2's policy for comparing objects of different types ('int' < 'list' < 'string' < 'tuple') as noted here. In Python 3, comparing objects of different types will lead to a TypeError.

For an example of object comparison mayhem, try removing the int() call in section 6.1.1. of the Python tutorial Fibonacci code and you'll get an infinite loop, since the while loop condition becomes: 'int' < 'string'. (This would not happen in Perl, btw).

Great advice from @Jan-Philip above to validate command-line arguments, even for Python 3.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!