在Python编码初学过程中,经常会看到一些报错信息,通常来说Python的异常分为两类:一是语法错误,二是异常。在Python中,assert(断言)用于一个表达式,在表达式条件为false时触发异常。
什么是异常? 即便在Python程序的语法是正确的,在运行它的时候,也有可能发生错误,运行监测到的错误被称为"异常"!大多数的异常都不会被程序处理,都以错误信息的形式展示!异常以不同类型出现,这些类型作为信息的一部分打印出来,错误信息的前面部分显示了异常发生的上下文,并且调用栈的形式显示具体信息。
一、异常的类型
序号 | 异常名称 | 异常描述 |
1 | BaseException | 所有异常的基类 |
2 | SystemExit | 解释器请求退出 |
3 | KeyboardInterrupt | 用户中断执行(通常是输入^C) |
4 | Exception | 常规错误的基类 |
5 | StopIteration | 迭代器没有更多的值 |
6 | GeneratorExit | 生成器(generator)发生异常来通知退出 |
7 | StandardError | 所有的内建标准异常的基类 |
8 | ArithmeticError | 所有数值计算错误的基类 |
9 | FloatingPointError | 浮点计算错误 |
10 | OverflowError | 数值运算超出最大限制 |
11 | ZeroDivisionError | 除(或取模)零(所有数据类型) |
12 | AssertionError | 断言语句失败 |
13 | AttributeError | 对象没有这个属性 |
14 | EOFError | 没有内建输入,到达EOF标记 |
15 | EnviromentError | 操作系统错误的基类 |
16 | IOError | 输入/输出操作失败 |
17 | OSError | 操作系统错误 |
18 | WindowError | 系统调用失败 |
19 | ImportError | 导入模块/对象失败 |
20 | LookupError | 无效数据查询的基类 |
21 | MemoryError | 内存溢出错误(对于Python解释器不是致命的) |
22 | NameError | 未声明初始化对象(没有属性) |
23 | UnboundLocalError | 访问未初始化的本地变量 |
24 | ReferenceError | 弱引用(weak reference)试图访问垃圾回收的对象 |
25 | RuntimeError | 一般的运行时错误 |
26 | NotImplementedError | 尚未实现的方法 |
27 | SyntaxError | Python语法错误 |
28 | IndentationError | 缩进错误 |
29 | TabError | Tab和空格混用 |
30 | SystemError | 一般的解释器系统错误 |
31 | TypeError | 对类型无效的操作 |
32 | ValueError | 传入无效的参数 |
33 | UnicodeError | Unicode相关的错误 |
34 | UnicodeDecodeError | Unicode解码时的错误 |
35 | UnicodeEncodeError | Unicode编码时错误 |
36 | UnicodeTranslateError | Unicode转换时错误 |
37 | Warning | 警告的错误 |
38 | DeprecationWarning | 关于被弃用的特征的警告 |
39 | FutureWarning | 关于构造将来(未来)语句会有改变的警告 |
40 | OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
41 | PendingDeprecationWarning | 关于特征将会被废弃的警告 |
42 | RuntimeWarning | 可疑的运行时行为(runtime behavior)警告 |
43 | SyntaxWarning | 可疑的语法的警告 |
44 | UserWarning | 用户代码生成的警告 |
二、捕获异常(try/except)
1. try/except
2. try/except ... else
try:
<语句> # 运行别的代码
except <异常的名字>:
<语句> # 如果在try部分引发的"name"异常
except <名字>,<数据>:
<语句> # 如果引发了"name"异常,获得附加的数据
else:
<语句> # 如果没有异常发生
3. try/finally
4. raise
try:
<语句>
finally:
<语句> # 退出try时,总是会执行
raise
# 异常的参数
try:
正常的操作
......
except ExceptionType,Argument:
你可以在这里输出Argument的值
三、raise和assert
raise:
python可以自动触发异常,raise(内置函数)的定义为显示抛出异常,用户可以使用raise进行判断,显式的引发异常,raise执行后程序将不再向下执行。
books_dict = {'name':'python','pages':390}
key = input("查看属性:")
if key in books_dict:
print(books_dict[key])
else:
raise KeyError
assert:
assert语句用于检测某个条件表达式是否为真。assert语句又称为“断言”语句,即assert认为检测的表达式永远为真,断言用来指定某一操作必须为真,也可以在脚本执行时加上python -o 参数跳过assert检测,也可以使用assert False来显示代码编写未完成
def demo(data) ->list:
assert data, "data is None"
print("*" * 30)
# demo([3,'list2'])
demo([])