Python程序设计之异常处理(下)

146 阅读2分钟
参与拿奖:本文已参与「新人创作礼」活动,一起开启掘金创作之路
1.处理异常的两种特殊方法:

1.1 断言: 语句格式:assert exception[,reason] 解释:当exception为真时,什么都不做,如果表达式为假就抛出异常; 注意:assert一般用于对某个时刻必须满足的条件进行验证,__debug__为真时有效,当Python脚本以-O选项编译时,assert语句将被移除来提高效率。

案例:

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!

1.2 上下文管理: 语句格式:with context_expr[as var]: with 块 解释:上下文管理,with语句可以实现自动管理资源,在代码块执行完毕后自动还原进入该代码块之前的现场或上下文; 注意:不论何时跳出with块,也不论是否发生异常,总能保证资源被释放!

案例:

with open('1.txt','r+') as f:
    for line in f:
        print(line)
2.使用使用sys模块回溯最后的异常

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

注意:相对于标准异常处理机制,可以直接定位最终引发异常的原因,但难以直接确定引发异常的位置

#使用sys回溯最近的一次异常
import sys
#try:
#    block
#except:
#    t=sys.exc_info()    #返回一个三元组(type(异常类型),value/message(表示异常信息或者参数),traceback(包含调用栈信息的对象))
#    print(t)
try:
    1/0
except:
    r=sys.exc_info()    #相对于标准异常处理机制,可以直接定位最终引发异常的原因,但难以直接确定引发异常的位置
    print(r)
3.学习笔记

1.断言语句assert一般用于对程序某个时刻必须满足的条件的验证;

2.上下文管理语句with在代码执行完毕后能够自动还原进入代码之前的现场或上下文,不论是否发生异常总能保证验证资源被正确释放。