1

当在命令行窗口中将输入作为整数并给出一些字符串或字符时,会发生以下错误:

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

如何在没有try-except阻塞的情况下处理这个问题?

4

4 回答 4

3

如果您必须避免使用try:/ except:,请使用:

def is_int_number(num):
    return num.strip().lstrip('-+').isdigit() and num.count('-') + num.count('+') <= 1

作为测试;这匹配几乎所有int()将接受为 base-10 数字的字符串值:

>>> for v in [' +2 ', '-3', '     4', '5    ', '6', '7', '8', '9', '10', '...', '  +1458  ', 'Next']:
...     print '{!r} is {}'.format(v, int(v) if is_int_number(v) else 'not a number')
... 
' +2 ' is 2
'-3' is -3
'     4' is 4
'5    ' is 5
'6' is 6
'7' is 7
'8' is 8
'9' is 9
'10' is 10
'...' is not a number
'  +1458  ' is 1458
'Next' is not a number

普通代码中,我们使用try/ except ValueError:,但是:

try:
    fieldindex = int(sys.argv[1])-1
except ValueError:
    print('Please enter a number')
    sys.exit(1)
于 2013-10-09T07:06:54.490 回答
1

如果你真的想避免 try/except 块,你可以使用内置isdigit()方法并手动进行检查,但作为其他回复者,我建议只使用 try/except 。

于 2013-10-09T07:05:44.703 回答
1

您需要尝试一下,然后捕获 ValueError

请查看此 python 文档:

http://docs.python.org/2/tutorial/errors.html

于 2013-10-09T07:01:58.730 回答
0

只需使用一个 for-in 块来验证每个字符是否为数字,否则会失败:

_zero = ord('0')
_nine = ord('9')

def is_num(value):
    for c in value:
        if not (_zero <= c <= _nine):
            return False

    return True

print(is_num(b'234'))

值得一提的是,这种策略不是“Pythonic”。最好尽可能依赖异常,并尽可能远离结果检查。

于 2013-10-09T07:29:45.387 回答