10.1 错误
错误 | 说明 |
---|---|
NameError: | 尝试访问一个未申明的变量 |
ZeroDivisionError: | 除数为零 |
SyntaxError: | Python 解释器语法错误 |
IndexError: | 请求的索引超出序列范围 |
KeyError: | 请求一个不存在的字典关键字 |
IOError: | 输入/输出错误 |
AttributeError: | 尝试访问未知的对象属性 |
TypeError: | 类型不正确 |
ValueError: | 值的错误 |
AssertionError: | 断言异常 |
其他异常参考官网文档Built-in Exceptions
10.2 检测和处理异常
- 任何在 try 语句块里的代码都会被监测
- try-except 和 try-finally
- 一个 try 语句可以对应一个或多个 except 子句, 但只能对应一个finally 子句, 或是一个 try-except-finally 复合语句
- 而 try-finally 只允许检测异常并做一些必要的清除工作
处理多个异常示例1
try:
statement
except Exception1, reason:
statement
except Exception2, reason:
statement
处理多个异常示例2
try:
statement
except (Exception1,Exception2), reason:
statement
处理所有异常
try:
statement
except Exception, reason:
statement
或者使用BaseException替代Exception
reason是异常类的实例,可以省略,也可以有用户指定错误信息给它。
5. 异常检查逻辑中可以添加else分支。当异常未发生时执行。
6. finally 子句是无论异常是否发生,是否捕捉都会执行的一段代码
10.3 异常代码逻辑模板
try:
try_suite
except Exception1:
suite_for_Exception1
except (Exception2, Exception3, Exception4):
suite_for_Exceptions_2_3_and_4
except Exception5, Argument5:
suite_for_Exception5_plus_argument
except (Exception6, Exception7), Argument67:
suite_for_Exceptions6_and_7_plus_argument
except:
suite_for_all_other_exceptions
else:
no_exceptions_detected_suite
finally:
always_execute_suite
10.4 with
with在支持上下文管理的模块中使用
file
decimal.Context
thread.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore
_ _context_ _()
_ _enter()_ _
_ _exit_ _()
可选contextlib 模块
10.5 触发异常
raise [SomeException [, args [, traceback]]]
参数 | 说明 | 备注 |
---|---|---|
SomeExcpetion | 触发异常的名字,合法的异常字符串,类或实例 | 必填 |
args | 传给异常.对象或对象的元组 | 可选 |
traceback | None | 可选 |
通过实例触发异常
raise instance
raise instance.__class__, instance
10.6 断言
测试一个表达式,如果返回值是假,触发异常.
assert expression[, arguments]
10.7 sys.exc_info()
返回三元组
1. exc_type: 异常类
2. exc_value: 异常类的实例
3. exc_traceback: 追踪(traceback)对象