• 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外面的逻辑,我可以正常运行

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

  • 相关阅读:
    Linux线程同步方法
    Linux进程间通信:信号
    孤儿进程僵尸进程及其回收
    Linux守护进程
    Linux系统编程常见函数 (进程/线程)
    Linux系统编程常用函数 (文件/目录)
    C++实现贪吃蛇小游戏
    C++实现简易Vector类
    C++实现简易版字符串类
    《图解HTTP》读书笔记
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9227809.html
Copyright © 2020-2023  润新知