为何try-except无法捕获SyntaxError?Python异常处理问题咨询
问题原因及解决办法
为什么捕获不到SyntaxError?
SyntaxError属于解析阶段异常,Python解释器在加载、解析代码时就会检测到这类错误,此时你的函数还未进入执行流程,所以函数内部的except SyntaxError分支根本没有运行的机会,自然无法捕获该错误。
代码中的具体语法错误
你写的except ValueError,ZeroDivisionError:是Python 2的语法,Python 3中捕获多个异常必须用元组包裹,正确写法为:
except (ValueError, ZeroDivisionError):
修正后的完整代码
def bad_fun(n): try: try: print("we're good!") print(int("7u")) except (ValueError, ZeroDivisionError): print("Something wrong?") return 1 / n except ArithmeticError: print("Arithmetic Problem!") return None bad_fun(0) print("THE END.")
运行修正后的代码,会先触发int("7u")的ValueError,被内层except捕获并打印"Something wrong?";随后执行return 1 / n,因n=0触发ZeroDivisionError(属于ArithmeticError子类),被外层except捕获并打印"Arithmetic Problem!";最后程序继续执行,打印"THE END."。
内容的提问来源于stack exchange,提问作者kal
相关产品推荐
相关产品推荐

