Python中try/except识别负数的代码异常问题求助
问题分析与解决
我想让代码识别负数,但原代码会把小于0的数值判定为非数字。修改后的代码不管输入什么,都返回“not a number”,我本来是想练习try/except的用法,现在卡住了。
原代码问题
原代码的try/except逻辑没问题,但判断条件出错,导致负数被误判:
rawstr = input('enter a number: ') try: ival = int(rawstr) except: ival = -1 if ival > 0: print('nice work') else: print('not a number')
这里if ival > 0的判断逻辑错误——负数会进入else分支,被错误标记为“非数字”,但实际上try/except已经成功把负数字符串转换成了整数。
修改后代码的错误
修改后的代码完全偏离了正确路径,导致所有输入都被判定为非数字:
rawstr = input('enter a number: ') try: ival = abs(rawstr) except: ival = 'boob' if ival.isnumeric(): print('nice work') else: print('not a number')
abs()函数仅接受数字类型参数,直接传入字符串rawstr必然触发异常,ival会被赋值为'boob'- 字符串
'boob'调用isnumeric()永远返回False,因此所有输入都会输出“not a number” - 就算输入合法数字字符串(比如
'-5'),abs('-5')也会报错,因为abs不处理字符串类型
正确实现方案
要实现“识别所有整数(含正、负、零),非整数输入判定为非数字”的需求,保留try/except做类型转换,再判断转换是否成功即可:
rawstr = input('enter a number: ') try: ival = int(rawstr) # 转换成功则说明是有效整数 print('nice work') except ValueError: # 仅当转换失败时判定为非数字 print('not a number')
也可以用另一种写法:
rawstr = input('enter a number: ') ival = None try: ival = int(rawstr) except ValueError: pass if ival is not None: print('nice work') else: print('not a number')
注意:尽量捕获具体的ValueError,不要用裸except,避免意外捕获其他类型的异常。
内容的提问来源于stack exchange,提问作者Luci5274
相关产品推荐
相关产品推荐

