程序运行时检测到问题导致解释器无法继续执行,出现一些错误的提示,这就是所谓的异常。(常见异常报错释义)利用异常处理机制的好处在于避免程序在运行时由于内部隐含的问题而引起错误,导致程序终止执行。

try-except 语句

try-except 语句,又称异常捕获语句。try 代码块中包含可能会引发异常的语句,如果发生异常,则跳到 except 代码块中执行。

  1. try: # 尝试执行并检测错误
  2. < 可能会引发异常的语句 >
  3. except: # 捕获异常并处理异常
  4. < 处理异常 >
  5. except: # ...
  6. < 处理异常 >

try 块有且仅有一个,但 except 代码块可以有多个,且每个 except 块都可以同时处理多种异常。但是不推荐该方法,尽管它捕获所有异常但是不能通过该程序识别出具体的异常信息。

image.jpg

捕获指定异常

  1. # coding=utf-8
  2. try:
  3. print(1/0)
  4. except ZeroDivisionError:
  5. print('捕获成功')

指定具体的异常类型,则 except 只能捕获在 try 中发生的指定类型的异常,如果发生的异常类型与捕获的异常类型不一致,则无法捕获异常

捕获多个指定异常

  1. # coding=utf-8
  2. try:
  3. print(1/0)
  4. except (ZeroDivisionError, NameError):
  5. print('捕获成功')

多个指定异常使用元组

捕获指定异常描述信息

  1. # coding=utf-8
  2. try:
  3. print(1/0)
  4. except (ZeroDivisionError, NameError) as e:
  5. print(e)

通过 as 将异常的描述信息赋值给变量 e ,可以捕获异常描述信息

捕获所有异常

  1. # coding=utf-8
  2. try:
  3. print(1/0)
  4. except Exception as e:
  5. print(e)

通过 Exception 是所有异常类的父类,可以进行简写。但是不推荐,容易造成系统开销。

try-finally 语句

使用 try-except 语句时会占用资源,使用 try-finally 则是无论 try 代码正常结束还是 except 代码块异常结束,都会执行 finally 代码块用于释放资源。
image.png

推荐使用

try-else 语句

  1. try: # 尝试执行并检测错误
  2. < 可能会引发异常的语句 >
  3. except: # 捕获异常并处理异常
  4. < 处理异常 >
  5. else:
  6. < 无异常执行该语句 >

raise 语句

raise 语句可以手动主动排除异常,一般用于想主动测试程序问题

  1. age = int(input('请输入数字: '))
  2. if age < 18:
  3. raise ValueError('年龄太小')