• 异常处理


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

    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)
  • 相关阅读:
    [atARC100F]Colorful Sequences
    [atARC103D]Robot Arms
    [atARC107F]Sum of Abs
    [atAGC047F]Rooks
    [loj3278]收获
    [cf809E]Surprise me
    [cf997E]Good Subsegments
    [cf603E]Pastoral Oddities
    Codeforces Round #453
    Educational Codeforces Round 32
  • 原文地址:https://www.cnblogs.com/djjv/p/7515743.html
Copyright © 2020-2023  润新知