以下两个代码段都执行相同的操作。他们捕获每个异常并执行except:块中的代码
except:
片段1-
try: #some code that may throw an exception except: #exception handling code
摘要2-
try: #some code that may throw an exception except Exception as e: #exception handling code
两种结构到底有什么区别?
在第二个中,您可以访问异常对象的属性:
>>> def catch(): ... try: ... asd() ... except Exception as e: ... print e.message, e.args ... >>> catch() global name 'asd' is not defined ("global name 'asd' is not defined",)
但是它不会捕获BaseException或系统退出异常SystemExit,KeyboardInterrupt并且GeneratorExit:
BaseException
SystemExit
KeyboardInterrupt
GeneratorExit
>>> def catch(): ... try: ... raise BaseException() ... except Exception as e: ... print e.message, e.args ... >>> catch() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in catch BaseException
除了一个裸露的:
>>> def catch(): ... try: ... raise BaseException() ... except: ... pass ... >>> catch() >>>
有关更多信息,请参见文档的“内置异常”部分和本教程的“错误与异常”部分。