异常处理

拍错的时候 真正报错的是在最下面

python 的代码是不会出错的应该从下向上找最后一行自己写的代码去处理

异常处理的应用:

1可以使用if 规则,但是成本太高

2不能用if 处理了 StopIteration 

异常处理的特点,一旦发生异常,程序就不再执行

try:
    num=input('num:')
    int(num) #ValueError
    print(num)
except ValueError:
    print('请输入一个数字')

放在try中的代码如果遇到except 中的错误类型,就会执行except中的代码

且一旦发生异常,try中的代码会停止在异常处

但是不影响try语句之外的代码执行

一种错误类型只能处理对应的一种错误,其他错误还会照常报错

try:
    num=input('num:')
    int(num) #ValueError
    print(num)
    a
    sum(1,2,3)
except ValueError:
    print('请输入一个数字')
except NameError as nameerror:
    print('产生一个 %s'%nameerror)
except TypeError:
    print('又一个错误诞生了')

 

as

在我们不能完全明确的知道这个错误到底是发生了什么的时候

就用as 变量名,将变量中存储的错误信息打印处理

万能异常

try:
    num=input('num:')
    int(num)#ValueError
    b        #NameError
    dic={}
    dic['key'] #KeyError
    l=[]
    l[1000] #IndexError
    l=[1,23]
    l_iterator=iter(1)
    next(l_iterator)
    next(l_iterator)
    next(l_iterator) #StopIteration
except ValueError:
    print('请输入一个数字')
except Exception as e:
    print(e)

对于你已经可以预见的但是不能完全规避的必须要处理异常,

你应该去指定他的处理方式

对应你不能预料的, 再使用万能异常处理

异常处理中的else语句

try:
    a=1
except NameError as  e:
    print(e)
else:
    print('当try语句中不会发生异常的时候执行else中的代码啦')
finally
    def func():
        try:
            f=open('file')
            int(f.read())
        except ValueError as e:
            a=123
            return a
        finally:
            f.close()
def wrapper(func):
    def inner(*args,**kwargs):
        try:
            return func(*args,**kwargs)
        finally:
            '被装饰的函数执行之后要执行的内容'
    return inner

 

try:
    f=open('file')
    int(f.read())
except ValueError:
    print('读文件失败了')
except Exception as e:
    print(e)
else:
    print('成功了')
finally:
    f.close()
def func():
    assert 1==2
    print(123)
    print(456)

 

posted @ 2017-09-13 16:40  程绩  阅读(133)  评论(0编辑  收藏  举报