异常处理
1.什么事异常
- 异常是程序运行时可能发生的错误或意外情况。在Python中,异常是一种对象,表示程序执行期间发生的错误。
- 当出现异常时,程序的正常流程会被中断,而是跳转到异常处理流程
2.异常分类
- 在Python中,异常分为两类:
- 内建异常(Built-in Exceptions):由Python内部定义的异常,例如
ZeroDivisionError
、NameError
等。 - 用户自定义异常:由程序员自己定义的异常,用于满足特定的业务需求。
- 内建异常(Built-in Exceptions):由Python内部定义的异常,例如
2.1 BaseException(所有异常的基类)
-
SystemExit:解释器请求退出
-
KeyboardInterrupt:用户中断执行(通常是输入^C)
-
Exception:常规错误的基类
-
StopIteration:迭代器没有更多的值
-
GeneratorExit:生成器(generator)发生异常来通知退出
-
StandardError:所有的内建标准异常的基类
-
ArithmeticError:所有数值计算错误的基类
-
FloatingPointError:浮点计算错误
-
OverflowError:数值运算超出最大限制
-
ZeroDivisionError:除(或取模)零 (所有数据类型)
-
AssertionError:断言语句失败
-
AttributeError:对象没有这个属性
-
EOFError:没有内建输入,到达EOF 标记
-
EnvironmentError:操作系统错误的基类
-
IOError:输入/输出操作失败
-
OSError:操作系统错误
-
WindowsError:系统调用失败
-
ImportError:导入模块/对象失败
-
LookupError:无效数据查询的基类
-
IndexError:序列中没有此索引(index)
-
KeyError:映射中没有这个键
-
MemoryError:内存溢出错误(对于Python 解释器不是致命的)
-
NameError:未声明/初始化对象 (没有属性)
-
UnboundLocalError:访问未初始化的本地变量
-
ReferenceError:弱引用(Weak reference)试图访问已经垃圾回收了的对象
-
RuntimeError:一般的运行时错误
-
NotImplementedError:尚未实现的方法
-
SyntaxError:Python 语法错误
-
IndentationError:缩进错误
-
TabError:Tab 和空格混用
-
SystemError:一般的解释器系统错误
-
TypeError:对类型无效的操作
-
ValueError:传入无效的参数
-
UnicodeError:Unicode 相关的错误
-
UnicodeDecodeError:Unicode 解码时的错误
-
UnicodeEncodeError:Unicode 编码时错误
-
UnicodeTranslateError:Unicode 转换时错误
2.2 Warning(警告的基类)
- DeprecationWarning:关于被弃用的特征的警告
- FutureWarning:关于构造将来语义会有改变的警告
- OverflowWarning:旧的关于自动提升为长整型(long)的警告
- PendingDeprecationWarning:关于特性将会被废弃的警告
- RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
- SyntaxWarning:可疑的语法的警告
- UserWarning:用户代码生成的警告
3.触发异常
# 【一】异常捕获语法
'''
try:
可能会发生异常的代码块
# Exception : 任意异常类型都会被捕获到,并且赋值给变量e
except Exception as e:
# 展示异常原因
print(e)
'''
# 【1】不指定错误类型,只捕获异常
# try:
# print(int('a'))
# except:
# print(f'报错了')
# 【2】指定确认的异常类型,并捕获
# try:
# print(int('a'))
# except ValueError as e:
# print(e)
# 【3】无论是什么异常,都会被捕获到,并且输出
# try:
# print(int('a'))
# except Exception as e:
# print(e)
# 【4】异常分支语句
'''
try:
# 正常的操作
...
except:
# 发生异常,执行这块代码
...
else:
# 如果没有异常执行这块代码
...
'''
# # 捕获异常的代码块
# try:
# # print(int('a'))
# print(int('1'))
# # 捕获异常
# except:
# print("出错了")
# # 正常代码块执行完成会执行 else 里面的代码块
# else:
# print(f"这是 else 语句")
# 【5】捕获多个异常类型
# try:
# result = 10 / 0
# print(int('a'))
# except (ZeroDivisionError, ValueError) as e:
# print(f"Error: {e}")
# else:
# print("No exception occurred")
# 【6】无论是否发生异常都将执行最后的代码
'''
try:
# 正常执行的代码
...
except:
# 发生异常,执行这块代码
finally:
#退出try时总会执行
...
'''
# try:
# result = 10 / 0
# except ZeroDivisionError as e:
# print(f"Error: {e}")
# # 无论是否存在异常或报错,finally 内的代码块都会执行
# finally:
# print("Finally block is executed")
# 【7】主动触发异常 --- raise
# try:
# # print(int('1'))
# raise ValueError('字符串的 1 就不允许转换成整型!')
# except Exception as e: # error
# print(f"这是异常 {e}")
# 循环遇到异常也会停止运行
# while True:
# raise ValueError()
# 【8】自定义异常
# class MyException(BaseException):
# def __init__(self, args):
# print(f'MyException :>>>> {args}')
#
# # def __new__(cls, *args, **kwargs):
# # print(f'这是 MyException抛出的异常 ')
#
#
# try:
# raise MyException('这是自己的异常')
# except Exception as e:
# print(f"这是错误 {e}")
# 【二】断言
# # 必须带 NB
# username = input('请输入用户名:>>>> ').strip()
#
# assert 'NB' in username, '必须带NB'
'''
assert condition, message
condition:断言的条件,如果为False,则触发异常。
message:可选参数,用于指定触发异常时的错误消息。
'''
标签:错误,处理,except,try,基类,print,异常
From: https://www.cnblogs.com/Formerly/p/17880286.html