python之错误和异常

错误和异常

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_suite
except 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_suite
finally:     
    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)对象
阅读更多
个人分类: python
上一篇python之面向对象进阶
下一篇python之网络编程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭