Python:测试参数是否为整数

时间:2010-11-19 19:43:44

标签: python validation parameters

我想编写一个带3个参数的python脚本。第一个参数是字符串,第二个是整数,第三个也是整数。

我想在开始时进行条件检查,以确保提供适当数量的参数,并且在继续之前它们是正确的类型。

我知道我们可以使用sys.argv来获取参数列表,但我不知道在将参数分配给我的本地变量以供使用之前如何测试参数是一个整数。

非常感谢任何帮助。

8 个答案:

答案 0 :(得分:15)

str.isdigit()可用于测试字符串是否仅由数字组成。

答案 1 :(得分:10)

更一般地说,您可以使用isinstance来查看某个内容是否是某个类的实例。

显然,在脚本参数的情况下,一切都是字符串,但如果您正在接收函数/方法的参数并想要检查它们,您可以使用:

def foo(bar):
    if not isinstance(bar, int):
        bar = int(bar)
    # continue processing...

您还可以将一组类传递给isinstance:

isinstance(bar, (int, float, decimal.Decimal))

答案 2 :(得分:8)

如果您正在运行Python 2.7,请尝试导入argparse。 Python 3.2也将使用它,它是解析参数的新首选方法。

Python documentation page中的示例代码接收一个int列表,并找到传递的数字的最大值或总和。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

答案 3 :(得分:6)

如果输入不支持像

这样的操作,Python的方法是尝试失败
try:
   sys.argv = sys.argv[:1]+map(int,sys.argv[1:])
except:
   print 'Incorrect integers', sys.argv[1:]

答案 4 :(得分:4)

您可以使用type来确定Python中任何对象的类型。这适用于Python 2.6,我个人不知道它是否存在于其他版本中。

obvious_string = "This is a string."
if type(obvious_string) != int:
    print "Bro, that is so _not_ an integer."
else:
    print "Thanks for the integer, brotato chip."

答案 5 :(得分:2)

我是Python的新手,所以我发布这个不仅仅是为了帮助而且还有所帮助:对我的方法为什么/不是最好的方法进行评论,就是这样。

所以,由于免责声明我不是一个经验丰富的python开发者,我会这样做:

inp = sys.argv[x]
try:
    input = int(inp)
except ValueError:
    print("Input is not an integer")

上面做的是它将sys.argv [x]放入inp然后尝试将整数形式的inp输入。如果没有整数形式的inp,则inp不是数字,因此会引发ValueError异常。

我认为这是你的主要问题,你知道如何检查你是否有正确形式的所有三个参数。如果没有,请告诉我们,我相信您会得到更多答案。 :)

刚刚意识到Tony Veijalainen发布了similar answer

答案 6 :(得分:1)

>>> int('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'foo'

将其提交给int。如果它没有引发ValueError,那么该字符串就是一个整数。

答案 7 :(得分:0)

您可以转换参数并尝试...除了ValueError。

如果您使用的是sys.argv,请调查argparse。

相关问题