8.4 断言与上下文管理、sys 模块回溯异常

     

8.4.1 断言

      语法:

assert expression[, reason]

      当表达式 expression 为真时,什么也不做;为假时,抛出异常。
      断言与异常经常结合起来使用。

>>> try:
    assert 1==2, "1 is not equal 2!"
except AssertionError as reason:
    print("%s:%s"%(reason.__class__.__name__, reason))

    
AssertionError:1 is not equal 2!

8.4.2 上下文管理

      上下文管理语句 with 可以自动管理资源,在代码执行完毕后还原进入改代码之前的现场或上下文。

>>> with open('sample.txt') as f:
    for line in f:
        print(line)

8.5 用 sys 模块回溯异常

      sys.exc_info() 的返回值是一个三元组 (type, value/message, traceback)。type 表示 异常的类型,value 表示异常的信息或参数,traceback 则包含调用栈信息的对象。

>>> import sys
>>> try:
    1/0
except:
    r = sys.exc_info()
    print(r)

    
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x038E7DA8>)

      下面代码演示了异常跟踪和 sys.exc_info() 之间的区别。sys.exc_info() 可以直接定位最终发生异常的原因,缺点是难以直接确定引发异常的代码位置。

>>> def A():
    1/0 
>>> def B():
    A() 
>>> def C():
    B()
>>> C()
Traceback (most recent call last):
  File "<pyshell#124>", line 1, in <module>
    C()
  File "<pyshell#122>", line 2, in C
    B()
  File "<pyshell#119>", line 2, in B
    A()
  File "<pyshell#116>", line 2, in A
    1/0
ZeroDivisionError: division by zero
>>> try:
    C()
except:
    r = sys.exc_info()
    print(r)    
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x038EA648>)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容