异常处理
(1)什么是异常
- 异常是程序运行时可能发生的错误或意外情况。在Python中,异常是一种对象,表示程序执行期间发生的错误。
- 当出现异常时,程序的正常流程会被中断,而是跳转到异常处理流程。
(2)异常分类
- Python中,异常分为两类:
- 内建异常(Built-in Exceptions):有Python内部定义的异常。
- 用户自定义异常:由程序员子集定义的异常,用于满足特定的业务需求。
(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)Warning(警告的基类)
- DeprecationWarning:关于被弃用的特征的警告
- FutureWarning:关于构造将来语义会有改变的警告
- OverflowWarning:旧的关于自动提升为长整型(long)的警告
- PendingDeprecationWarning:关于特性将会被废弃的警告
- RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
- SyntaxWarning:可疑的语法的警告
- UserWarning:用户代码生成的警告
(3)触发异常
- 异常捕获的语法
# 异常捕获的语法
# try:
# # 可能会发生异常的代码块
# # Exception 任意的异常类型都会被捕获到,并且赋值给变量e
# except Exception as e:
# # z展示异常原因
# print(e)
- 捕获异常
# #(1)不指定错误,只捕获异常
# try:
# print(int('syh'))
# except Exception as e:
# print(e)
# #invalid literal for int() with base 10: 'syh'
# #(2)指定异常类型,并捕获
# try:
# print(int('syh'))
# except ValueError as e:
# print(e)
# # invalid literal for int() with base 10: 'syh'
# #(3)无论是什么异常,都会被捕获到,并且输出
# try:
# print(int('syh'))
# except Exception as e:
# print(e)
# #invalid literal for int() with base 10: 'syh'
- 异常分支语句
"""异常分支语句"""
# try:
# #正常的操作
# ...
# except Exception as e:
# # 出现异常执行代码块
# ...
# else:
# # 没有出现异常执行代码块
# ...
- 分支语句捕获异常
# #1.捕获异常的代码块
# try:
# # print(int('syh'))#invalid literal for int() with base 10: 'syh'
# print('syh')
# except Exception as e:
# print(e)
# else:
# print('没有发现异常!')
# #没有发现异常!
# # #2.捕获多个异常类型
# try:
# print(int('syh'))
# res= 10/0
# except (ZeroDivisionError,ValueError) as e:
# print(f'捕获的异常:{e}')
# else:
# print('没有异常!')
# #捕获的异常:invalid literal for int() with base 10: 'syh'
# try:
# result = 10 / 0
# print(int('a'))
# except (ZeroDivisionError, ValueError) as e:
# print(f"Error: {e}")
# else:
# print("No exception occurred")
#
# Error: division by zero
- 无论是发生异常都执行最后的代码块
- finally
'''
try:
# 正常执行的代码
...
except:
# 发生异常,执行这块代码
finally:
#退出try时总会执行
...
'''
# #3无论是否发生异常都执行最后的代码
# try:
# print(int('syh'))
# except Exception as e:
# print(f'捕获的异常{e}')
# finally:
# print('helloworld!')
# #捕获的异常invalid literal for int() with base 10: 'syh'
# #helloworld!
- 主动触发异常
"""主动触发异常"""
# raise Exception(异常内容)
"""
try:
正常逻辑
except Exception,err:
触发自定义异常
else:
其余代码
"""
#4.主动触发异常
try:
print(int('1'))
raise ValueError('字符串的1,不允许转换成整型')
except Exception as e:
print(f'异常:{e}')
#1
# 异常:字符串的1,不允许转换成整型
'''
# 循环遇到异常也会停止运行
# while True:
# raise ValueError()
'''
(4)自定义异常
# #自定义异常
# try:
# raise Exception('字符串类型不能强转为数字类型')
# except Exception as e:
# print(f'异常:{e}')
# 【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}")
(5)断言
- 断言是一种声明,用于在代码中标记出预期的状态。
- 如果断言的条件为
False
,则会触发AssertionError
异常。
(1)语法
assert condition, message
assert 条件,异常信息
condition
:断言的条件,如果为False
,则触发异常。message
:可选参数,用于指定触发异常时的错误消息。
# #断言assert
# username=input('请输入用户名:')
# # assert 条件,异常信息
# assert 'NB' in username,'必须带上NB'
# # Traceback (most recent call last):
# # File "D:\old boy\python\python28基础\day11\异常处理.py", line 130, in <module>
# # assert 'NB' in username,'必须带上NB'
# # AssertionError: 必须带上NB
标签:Exception,处理,except,try,int,print,异常
From: https://www.cnblogs.com/suyihang/p/17880266.html