如何用if-else替代try-except,正确实现数字输出或‘非数字’提示?
问题:将try-except改写为if-else时触发类型错误
这是一道高中编程作业题,要求把老师给出的try-except Python代码改写成if-else语句,但改写后一直报错,不清楚问题所在。
老师提供的原代码
data = [10, 9, "Cindi", 4, "8"] for x in data: try: print(x/2) except: print("Not a number")
我尝试改写的代码
data = [10, 9, "Cindi", 4, "8"] for x in data: if x: print(x/2) else: print("Not a number")
报错信息(第4行)
TypeError: unsupported operand type(s) for /: 'str' and 'int'
期望输出
5 4.5 Not a number 2 Not a number
问题原因及解决方法
你的代码逻辑错在if x的判断逻辑——它只是检查x是否为“真值”,但列表里的字符串"Cindi"和"8"都是非空字符串,属于真值,会进入if分支执行x/2,而字符串和整数无法做除法运算,所以触发类型错误。
原try-except的逻辑是:只要无法执行x/2(不管是字符串类型,还是其他不能除法的类型),就输出提示。要对应这个逻辑,应该判断x是否是可以直接做除法的数字类型(整数或浮点数):
修改后的正确代码:
data = [10, 9, "Cindi", 4, "8"] for x in data: if isinstance(x, (int, float)): print(x / 2) else: print("Not a number")
这段代码会检查每个元素的类型,只有整数或浮点数才执行除法,其他类型都输出Not a number,和原代码的输出完全一致。
内容的提问来源于stack exchange,提问作者Rain15
相关产品推荐
相关产品推荐

