try:
try:
i = 5 / 0
except IOError:
print("io-error")
except ZeroDivisionError:
print("n/0 error")
raise
except Exception:
print("exception")
else:
print("correct")
finally:
print("finally")
except IOError:
print("2-io-error")
except ZeroDivisionError:
print("2-n/0 error")
except Exception:
print("2-exception")
else:
print("2-correct")
finally:
print("2-finally")
$ python test.py
n/0 error
finally
2-n/0 error
2-finally
总结
- 发生异常时,只会被第一个匹配的异常捕捉。
- 没发生异常则进入
else
。
- 不论是否发生异常都会执行
finally
。
-
raise
可以将异常抛到外层,默认抛出当前异常
-
raise
也可以指定异常,例如raise IOError
,指定异常必须继承BaseException
。
-
raise BaseException("123456")
可以指定异常信息,通过 except BaseException as e: print(e)
打印该信息。
- 如果没有
raise
则外层不会感知到异常发生。