首页 > 编程笔记 > Python笔记

Python assert异常处理(一看即懂)

Python 还支持断言语法。在一套程序完成之前,编程者并不知道程序可能会在哪里报错,或是触发何种条件的报错,因此使用断言语法可以有效地做好异常检测,并适时触发和抛出异常。

Python 中使用 assert 语句声明断言,其语法为:

assert 表达式 [, "断言异常提示信息"]


Python 首先检测表达式结果是否为 True,若为 True 则继续向下执行,否则将触发断言异常,并显示断言异常提示信息,后续代码捕获该异常并做进一步处理。例如:
def testAssert(x):
    assert x < 1,'无效值'
    print ("有效值")
testAssert(1)
上述代码的运行结果如下所示:

>>> def testAssert(x):
...          assert x < 1,'无效值'
...          print ("有效值")

>>> testAssert(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    testAssert(1)
  File "<stdin>", line 2, in testAssert
    assert x < 1,'无效值'
AssertionError: 无效值


可见,当 assert 语句判断的表达式结果为 False 时触发了断言异常,此时可以使用 try…except 语句捕获并做进一步处理,例如:
def testAssert(x):
    assert x < 1, '无效值'
    print("有效值")
try:
    testAssert(1)
except Exception:
    print("捕获成功")
上述代码的运行结果如下所示:

>>> def testAssert(x):
...          assert x < 1, '无效值'
...          print("有效值")
   
>>> try:
...         testAssert(1)
...     except Exception:
...         print("捕获成功")
   
捕获成功


Python解释器内置的预定义标准异常如表 1 所示。
表 1:Python 解释器内置的预定义标准异常
异常名称 描述
ArithmeticError 所有数值计算错误的基类
AssertionError 断言语句失败
AttributeError 对象无此属性
BaseException 所有异常的基类
DeprecationWarning 关于被弃用的特征的警告
EnvironmentError 操作系统相关的错误的基类
EOFError 到达文件尾(EOF, End-of-File)错误
Exception 常规错误的基类
FloatingPointError 浮点计算错误
FutureWarning 关于将来语义会有改变的警告
GeneratorExit 生成器发生异常通知退出
ImportError 引入模块/对象失败
IndentationError 缩进错误
IndexError 序列中无此索引
IOError 输入/输出操作失败
Keyboardlnterrupt 用户中断执行
KeyError 映射中无此键
LookupError 无效数据查询的基类
MemoryError 内存溢出错误
NameError 未声明/初始化对象,名称调用错误
NotImplementedError 尚未实现的方法
OSError 操作系统错误
OverflowError 数值运算超出最大限制
PendingDeprecationWarning 关于特性将会被废弃的警告
ReferenceError 弱引用试图访问已经被回收的对象
RuntimeError 一般运行时错误
RuntimeWarning 运行时行为警告
StandardError 所有内建标准异常的基类
StopIteration 迭代器没有更多的值
SyntaxError Python语法错误
SyntaxWarning 语法警告
SystemError 一般的解释器系统错误
SystemExit 解释器请求退出
TabError Tab和空格混用
TypeError 对类型无效的操作
UnboundLocalError 访问未初始化的本地变量
UnicodeDecodeError Unicode解码错误
UnicodeEncodeError Unicode编码错误
UnicodeError Unicode相关错误
UnicodeTranslateError Unicode转换错误
UserWarning 用户代码生成的警告
ValueError 传入无效参数
Warning 各种警告的基类
WindowsError 系统调用失败
ZeroDivisionError 除(或取模)零错误

所有教程

优秀文章