python之错误和异常

来源:互联网 发布:淘宝旺旺客服电话 编辑:程序博客网 时间:2024/05/19 04:26

错误和异常

1 错误
从软件层面上来说,错误分为语法错误和逻辑错误,语法错误指示软件的结构上有错误, 导致不能被解释器解释或编译器无法编译. 这些错误必须在程 序执行前纠正。 逻辑错误可能是由于不完整或是不合法的输入 所致; 在其他情况下, 还可能是逻辑无法生成, 计算, 或是输出结果需要的过程无法执行。
2 异常
对异常的好描述是: 它是因为程序出现了错误而在正常控制流以外采取的行为. 这个行为又 分为两个阶段: 首先是引起异常发生的错误, 然后是检测(和采取可能的措施)阶段。
3 Python 中的异常
python中的异常也是一个类,所有的异常都继承自baseexception。每个异常都由三部分组成:traceback,错误名称,错误原因。
4 python中检测和处理异常的机制是try-except语句
如下:

try:         try_suite    # watch for exceptions here 监控这里的异常 except Exception[, reason]:         except_suite    # exception-handling code  异常处理代码

5 带有多个except的try语句

try:         try_suite    except Exception[, reason]:         except_suite    except Exception1[, reason1]:         suite_for_exception_Exception1 except Exception2[, reason2]:         suite_for_exception_Exception2 

6 在python中还可以处理多个异常的except语句, except 语句在处理多个异常时要求异常被放 在一个元组里

except (Exc1[, Exc2[, ... ExcN]])[, reason]:    suite_for_exceptions_Exc1_to_ExcN 

7 捕获所有异常
在python中大多数类都继承自exception,所以可以用这个异常捕捉大多数异常:

try:         try_suiteexcept Exception as e:        except_suite

8 else子句
在 try 范围中没有异常被检测到时,执行 else 子 句

try:         3rd_party_module.function() except:         log.write("*** caught exception in module\n") else:         log.write("*** no exceptions caught\n")

9 finally子句
finally 子句是无论异常是否发生,是否捕捉都会执行的一段代码。
下面是 try-except-else-finally 语法的示例:

try:         A except MyException: B else: C finally: D 

10 try-except-else-finally:语句

try:         try_suite except Exception1:         suite_for_Exception1 except (Exception2, Exception3, Exception4):    suite_for_Exceptions_2_3_and_4 except Exception5 as Argument5:         suite_for_Exception5_plus_argument else:         no_exceptions_detected_suitefinally:         always_execute_suite 

11 触发异常
到目前为止,我们所见到的异常都是由解释器引发的.由于执行期间的错误而引发.程序员在编 写 API 时也希望在遇到错误的输入时触发异常,为此,Python 提供了一种机制让程序员明确的触发异 常:这就是 raise 语句。

raise [SomeException [, args [, traceback]]] 

第一个参数,SomeExcpetion,是触发异常的名字。
第二个符号为可选的 args(比如参数,值),来传给异常。
12 断言
断言是一句必须等价于布尔真的判定。
断言语句等价于这样的 Python 表达式,如果断言成功不采取任何措施(类似语句),否则触发 AssertionError(断言错误)的异常.assert 的语法如下:

assert expression[, arguments] 

下面是我们如何用 try-except 语句捕获 AssertionError 异常:

try:         assert 1 == 0, 'One does not equal zero silly!' except AssertionError as args:         print '%s: %s' % (args.__class__.__name__, args) 

13 创建异常
尽管标准异常集包含的内容已经相当广泛,你还是可以创建自己的异常.一种情况是你想在特定 的标准异常和模块异常中添加额外的信息。
14 为什么用异常
在应用层处理错误的能力近来变得更为重要, 用户已不再是应用程序的的唯一的直接运行者,程序再也不能只是直接的失败或崩溃,如果这样,就会导致无法挽回的损失。
15 异常和sys模块
另一种获取异常信息的途径是通过 sys 模块中 exc_info()函数. 此功能提供了一个 3 元组 (3-tuple)的信息, 多于我们单纯用异常参数所能获得. 让我们看看如何用 sys.exc_info() :

try: ...         float('abc123') ... except: ...         import sys ...         exc_tuple = sys.exc_info() 

我们从 sys.exc_info()得到的元组中是:

  • exc_type: 异常类
  • exc_value: 异常类的实例
  • exc_traceback: 追踪(traceback)对象
0 0
原创粉丝点击