模块之异常处理

异常处理
排错的时候,真正报错的时候是最下面
应用--可以用if规避,但是成本太高
--不能用if处理时,

异常处理的特点:一旦发生异常,程序就不在执行
try:
"没有出现expect异常时执行,只执行到出现expect中异常的地方"
except "异常类型" as "变量名":(在不能完全明确知道这个错误是发生了什么的时候,就用as把变量名打印出来)
print("提示的内容%s"%"变量名")
"出现expect异常时执行"
一种错误类型,只能处理对应的一种错误,其他错误还会照常报错
expect多个,只执行第一个对应的expect异常处理

万能异常---Exception--只能判断有异常,没法判断具体的异常情况
对于已经可以预见的,但是必须要处理的,不能完全规避的必须要处理的异常,要去指定他的处理方式
对于不能确定的 ,使用万能异常
万能异常应该放在所有异常之后

异常处理的else语句--当try语句没有发生异常时执行

finally--无论try中有没有发生异常,都会执行
当发生了异常return时,还能执行finally,但是要先执行finally,再return
主要做一些清理的工作,把之前打开的链接 文件都关掉,避免因为程序异常造成的浪费资源和逻辑问题


def wrappr(func):
    def inner(*args,**kwargs):
        try:
            return func(*args,**kwargs)
        finally:
            "清理工作"
    return inner
装饰器
顺序问题
try:
    f = open("file")
    int(f.read())
except ValueError:#---try中出现ValueError异常时执行
    print("读文件失败")
except Exception as e:
    print(e)
else:#---try代码块中没有异常的时候才会被执行
    print("操作成功")
finally:#---finally代码块中的代码永远执行
    f.close()

 

raise --主动触发异常

断言--assert--相当于if判断
assert 1==2#---报错,之后的程序都不会执行
if是预防异常处理的


try:
    num = input("num:")
    int(num)
    print(num)
    a = 1
    sum(12,33,4)
except ValueError:
    print("请输入一个数字")
except NameError:
    print("命名错误")
except TypeError:
    print("数据类型错误")
View Code

 
















posted @ 2017-09-13 21:50  chitalu  阅读(216)  评论(0)    收藏  举报