Python 异常
1、用户自定义异常
class Bad(Exception): pass def gotBad(): raise Bad() try: gotBad() except Bad as b: print("gotBad") else: pass # 没发生异常时执行 finally: pass # 无论有没有异常都会执行
空的except语句捕捉一切异常
2、raise语句不包括异常名称或额外数据值时,就会重新触发异常。
3、环境管理协议:with/as语句
(1)环境管理器必须有__enter__和__exit__方法
(2)环境管理器的__enter__方法会被调用,如果有as子句,则会将返回值赋给子句中的变量,否则,直接丢弃
(3)代码块中嵌套的代码会执行。
(4)如果with代码块引发异常,__exit__(type,value,traceback)方法会被调用。如果此方法返回值为假,就会重新引发异常,否则异常会终止。正常情况下异常应该是被重新引发,这样的话才能传递到with语句之外
(5)如果with代码块没有引发异常,__exit__方法依然会被调用,所有参数都会以None传递。
class TraceBack: def method(self): print("method run") def __enter__(self): print("enter method") return self def __exit__(self,exc_type,exc_value,exc_tb): if exc_type is None: print("no exception") else: print("exception") return False if __name__ == "__main__": with TraceBack() as action: action.method() print("finished")