zoukankan      html  css  js  c++  java
  • python的异常处理try/except 万能处理exception

    1、try方式

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    except ValueError as e:   #except代表捕捉的意思,as,把ValueError取个别名叫e
        print(e)
    #表示代码在执行过程中遇到异常之后直接跳到except
    
    C:python35python3.exe D:/pyproject/day31/错误与异常.py
    
    >>>23
    
    >>>>dd
    
    invalid literal for int() with base 10: 'dd'

    那如果出现了其他的类型的错误呢。我们上面这个只能捕捉到这一种错误类型

    2、try多分支异常处理,类似于elif

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    except KeyError as e:   #except代表捕捉的意思,把ValueError取个别名叫e
        print(e)
    except ValueError as e:
        print("--->",e)
    
    C:python35python3.exe D:/pyproject/day31/异常处理.py
    
    >>>aa
    
    ---> invalid literal for int() with base 10: 'aa'

    2.1上面这是2种错误,那么如果再来一种错误呢

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    
        l=[1,2,3]
        l[666666]#取一个不存在的索引就会触发IndexError
    except KeyError as e:   #except代表捕捉的意思,把ValueError取个别名叫e
        print(e)
    except ValueError as e:
        print("--->",e)
    except IndexError as e:
        print("索引错误",e)
    
    C:python35python3.exe D:/pyproject/day31/异常处理.py
    
    >>>1
    
    >>>>2
    
    索引错误 list index out of range

    2.2如果try里面的代码运行有错误了,并不影响try外面的代码的继续运行的

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    
        l=[1,2,3]
        l[666666]#取一个不存在的索引就会触发IndexError
    except KeyError as e:   #except代表捕捉的意思,把ValueError取个别名叫e
        print(e)
    except ValueError as e:
        print("--->",e)
    except IndexError as e:
        print("索引错误",e)
    print("我是try外面的逻辑,我可以正常运行")
    
    C:python35python3.exe D:/pyproject/day31/异常处理.py
    
    >>>11
    
    >>>>sdsf
    
    ---> invalid literal for int() with base 10: 'sdsf'
    
    我是try外面的逻辑,我可以正常运行

    3、那么还有好多的异常类型呢,总不能一个一个的都加上去吧,这时候就用到了万能异常

    Exception

    这样的话不管什么错误都可以捕捉的到了。

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    
        l=[1,2,3]
        l[666666]#取一个不存在的索引就会触发IndexError
    except Exception as e:  
    
        print("万能异常",e)
    print("我是try外面的逻辑,我可以正常运行")
    
    C:python35python3.exe D:/pyproject/day31/异常处理.py
    
    >>>111
    
    >>>>sdfdsf
    
    万能异常 invalid literal for int() with base 10: 'sdfdsf'
    
    我是try外面的逻辑,我可以正常运行 

    3.1 try  else  当代码块中没有异常则触发else

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    
    except Exception as e:   #except代表捕捉的意思,把ValueError取个别名叫e
        print("万能异常",e)
    else:
        print("没有异常就执行我")
    print("我是try外面的逻辑,我可以正常运行")
    
    C:python35python3.exe "D:/pyproject/day31异常处理 socket介绍/异常处理.py"
    
    >>>11
    
    >>>>22
    
    没有异常就执行我
    
    我是try外面的逻辑,我可以正常运行

    3.2 finally   不管有没有异常都执行这段代码块

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    
    except Exception as e:   #except代表捕捉的意思,把ValueError取个别名叫e
        print("万能异常",e)
    finally:
        print("无论是否异常都执行这段代码,通常是进行清理操作")
    print("我是try外面的逻辑,我可以正常运行")
    
    C:python35python3.exe "D:/pyproject/day31异常处理 socket介绍/异常处理.py"
    
    >>>11
    
    >>>>sddsdf
    
    万能异常 invalid literal for int() with base 10: 'sddsdf'
    
    无论是否异常都执行这段代码,通常是进行清理操作
    
    我是try外面的逻辑,我可以正常运行

    3.3我想达到这样的效果,如果用户输入的不对,就让他重新输入,知道正确为止

    while True:
        try:
            age=int(input(">>>"))
            int(age)#主逻辑
            break
        except Exception as e:
            print("请重新输入",e)
    print("我是try外面的逻辑,我可以正常运行")
    
    C:python35python3.exe D:/pyproject/day31/异常处理.py
    
    >>>222ss
    
    请重新输入 invalid literal for int() with base 10: '222ss'
    
    >>>11
    
    我是try外面的逻辑,我可以正常运行

    万能异常的缺点就是,假如你有一万行代码,不管啥错误都报这个,那你就不知道是哪里错了。。。

  • 相关阅读:
    【净界法师】【唯识三十颂05】《唯识三十颂》,什么是唯识呢?
    再谈呼吸调匀、全身放松之重要性
    何时该修十善,何时该念佛
    如何降服贪心
    用内观法切断欲望有何弊病
    洛桑陀美上师开示 | 如何遮止并断除贪爱?
    断除贪爱执着,才可以超越一切局限
    【佛子行浅释】逢遇悦意对境时, 视如夏季之彩虹, 虽显美妙然无实, 断除贪执佛子行。
    佛弟子如何断除对异性的贪爱与相思?益西彭措堪布超级精彩开示
    感人!北大博士出家前写给父母的信
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9227809.html
Copyright © 2011-2022 走看看