一、为什么要捕获异常
在可能发生异常的地方进行捕获,当异常出现时提供解决方式,避免任由异常导致程序无法运行。
二、捕获异常的语法
try
:后面跟可能要发生异常的语句。except [异常 as 别名:]
:出现异常时的准备手段。[else:]
:未出现异常时应做的事情。[finally:]
:不管出不出现异常都会做的事情。
注意:try,except是必选要素,else,finally是可选要素
异常捕获基础语法实例:
try:
# 可能引发异常的代码
result = 100 / 0
except ZeroDivisionError as e: #ZeroDivisionError指定异常
print(f"发生了内置异常:{e}") #发生了内置异常:division by zero
异常捕获增加else,finally语法的例子:
try:
# 可能引发异常的语句
num = int(input("请输入一个整数:"))
result = 10 / num
except ValueError as ve:
# 处理值错误异常
print(f"输入不是整数:{ve}")
except ZeroDivisionError as zde:
# 处理除零异常
print(f"不能除以零:{zde}")
else:
# 没有异常时执行的语句
print(f"结果是:{result}")
finally:
# 无论是否有异常都会执行的语句
print("程序执行完毕。")
三、如何捕获所有异常
当我们不确定有何种异常,有两种方式捕获全部异常的方法:
except:
#含系统内置错误和用户自定义错误 except Exception:。except Exception:
#仅系统内置错误,定位更精准更常用
try:
# 可能引发异常的代码
result = 100 / 0
except Exception as e: #Exception适用所有系统内置异常
print(f"发生了内置异常:{e}") #发生了内置异常:division by zero
四、异常的传递性概念
异常具有传递性。当某个函数中发生异常并且没有被该函数捕获处理时,异常会传递给调用它的函数。如果调用它的函数也没有捕获处理这个异常,那么异常会继续向上传递,直到被某个函数捕获处理或者如果所有函数都没有捕获异常,程序就会报错。
示例代码
def func01():
raise ValueError("在 func01 中发生的异常")
def func02():
func01()
def main():
try:
func02()
except ValueError as e:
print(f"在 main 函数中捕获到异常:{e}")
if __name__ == "__main__":
main()