Python脚本中Try/Except无法捕获ValueError的原因咨询
乘法表脚本异常处理失效的原因分析
你遇到的这个问题其实是异常处理的范围没搞对——咱们先拆解下代码里的核心问题:
你的try块仅仅包裹了函数mult()的定义,而真正会触发ValueError的int(num)操作,是在你调用mult()的时候才执行的,而这个调用是在try块外面的!
换句话说:你把“可能出问题的代码”(也就是int(num))放在了异常防护的范围之外,当它抛出错误时,根本没有对应的except块能接住,自然就直接弹出Traceback了。
修复方案
咱们可以调整代码结构,把可能触发异常的操作放进try块里,同时优化下代码逻辑(没必要每次循环都重新定义函数):
# shows multiplication table of a number upto that number import time # 把函数定义移到循环外,避免重复定义 def mult(num): for i in range(1, num + 1): # 用f-string让输出更简洁易读 print(f"{i} x {num} = {i * num}") while True: num_input = input("Enter number: ") try: # 在这里完成类型转换,把可能的异常接住 num = int(num_input) # 转换成功再调用函数 mult(num) except ValueError: print("Please enter a number") continue time.sleep(2)
额外优化说明
- 把函数定义移到
while循环外面,避免每次循环都重新创建一次函数,运行更高效; - 提前在
try块里完成输入到整数的转换,让函数只负责生成乘法表,职责划分更清晰; - 使用f-string替代字符串拼接,代码更简洁,可读性更强。
内容的提问来源于stack exchange,提问作者ProgrammaticallyMix0
相关产品推荐
相关产品推荐

