Python 异常处理(try except)

文章目录

  • 1 概述
    • 1.1 异常示例
  • 2 异常处理
    • 2.1 捕获异常 try except
    • 2.2 抛出异常 raise
  • 3 异常类型
    • 3.1 内置异常
    • 3.2 自定义异常

1 概述

1.1 异常示例

  • 异常:程序执行中出现错误,若不处理,则程序终止

示例代码:

v = 6 / 0  # 除数不能为 0print(v)

执行结果:
**在这里插入图片描述

2 异常处理

2.1 捕获异常 try except

# try:常规程序块
try:v = 6 / 0print(v)
# except: 捕获异常(捕获到就停止) 
except ZeroDivisionError:  # 测试 IOErrorprint('被除数不能为 0')
except Exception as e:  # 常规异常的基类print(f'仅异常未被上述捕获时,执行此处,{e}')
# else:仅无异常时,执行
else:print('仅无异常时,执行')
# 无论是否异常,均执行
finally:print('无论是否异常,均执行')

2.2 抛出异常 raise

try:a = input("输入一个数:")# 判断用户输入的是否为数字if not a.isdigit():raise ValueError("a 必须是数字")
except ValueError as e:# 返回异常信息print(e)  # a 必须是数字# 返回对象的规范字符串表示形式print("引发异常:", repr(e))  # 引发异常:ValueError('a 必须是数字')

3 异常类型

3.1 内置异常

  • Python 模块内置的
内置异常描述信息
ZeroDivisionError除以零的错误
ValueError值错误,通常与数据类型转换相关
TypeError类型错误,操作不支持的数据类型
FileNotFoundError文件未找到错误
Error  # 了解即可。 输入 Error,会提示所有的标准异常

在这里插入图片描述

3.2 自定义异常

  • 需继承 Exception 类
class MyError(Exception):def __init__(self, code, message):self.code = codeself.message = messagedef __str__(self):return f"{self.code}: {self.message}"def divide(a, b):if b == 0:raise MyError(400, "除数不能为0")return a / bif __name__ == '__main__':try:result = divide(6, 0)except MyError as e:print(e)  # 400: 除数不能为0