第10章 错误处理
- 异常参数:无论 reason 只包含一个字符串或是由错误编号和字符串组成的元组, 调用 str(reason) 总会返回一个良好可读的错误原因. 这样做其实是调用类的特殊方法 __str__().
- else子句:在try范围中没有异常被检测到时,执行else子句。
- finally子句是无论异常是否发生,是否捕捉都会执行的一段代码。finally可以仅和try一起使用,也可以和try-except(else也是可选的)一起使用
- try-finally语句不是用来捕捉异常的,无论是否发生异常,finally代码段都会被执行
-
上下文管理
- with语句:基本语法
with context_expr [as var]: with_suite
with语句的目的在于从流程图中把try,except和finally关键字和资源分配释放相关的代码统统去掉。with仅能工作于支持上下文管理协议的对象。 - 上下文管理协议:
上下文表达式(context_expr)与上下文管理器:当with语句执行时,便执行上下文表达式来获得一个上下文管理器。它会调用__context__()方法来提供一个上下文对象。
上下文对象,with语句块:上下文对象会调用自身的__enter__()方法,完成with语句块执行前的所有准备工作。方法的返回值赋值给as后的变量.with语句块结束之后调用__exit()__方法。
- with语句:基本语法
-
触发异常
1.5之前,标准异常基于字符串实现。后来,所有的标准异常都是类。现在可以使用字符串,但是不建议。(@deprecated)
- raise语句:
raise[SomeException [, args, [,traceback]]]
SomeException是触发异常的名字,必须是一个字符串,类或实例。args里包含着该例外可选的参数。异常的参数总是作为一个元组被返回。
不含任何参数的raise重新触发前一个异常。如果之前没有异常,触发TypeError.
- 断言语句::如果断言成功,不采取任何措施,否则触发AssertionError的异常。语法如下:assert expression[,argument]
- 标准异常都是内建的。它们都从根异常BaseException派生的。直接派生的有Exception,SystemExit,KeyboardInterrupt.其他的内建异常都是Exception的子类。
- raise语句:
-
创建异常
- tempfile模块包含了创建临时文件文件名和临时文件的方法
-
异常和sys模块
通过sys模块中的exc_info()函数也可以获取异常。该函数返回三元组,分别是:exc_type,异常类;exc_value,异常类的实例;exc_traceback,追踪(traceback)对象