当在命令行窗口中将输入作为整数并给出一些字符串或字符时,会发生以下错误:
ValueError: invalid literal for int() with base 10: 'a'
如何在没有try-except
阻塞的情况下处理这个问题?
当在命令行窗口中将输入作为整数并给出一些字符串或字符时,会发生以下错误:
ValueError: invalid literal for int() with base 10: 'a'
如何在没有try-except
阻塞的情况下处理这个问题?
如果您必须避免使用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)
如果你真的想避免 try/except 块,你可以使用内置isdigit()
方法并手动进行检查,但作为其他回复者,我建议只使用 try/except 。
只需使用一个 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”。最好尽可能依赖异常,并尽可能远离结果检查。