Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 418|回复: 0

python的异常处理try/except 万能处理exception

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-6-5 21:02:22 | 显示全部楼层 |阅读模式

    1、try方式

    try:
        age=int(input(">>>"))
        int(age)#主逻辑
    
        num=input(">>>>")
        int(num)#主逻辑
    except ValueError as e:   #except代表捕捉的意思,as,把ValueError取个别名叫e
        print(e)
    #表示代码在执行过程中遇到异常之后直接跳到except
    
    C:\python35\python3.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:\python35\python3.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:\python35\python3.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:\python35\python3.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:\python35\python3.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:\python35\python3.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:\python35\python3.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:\python35\python3.exe D:/pyproject/day31/异常处理.py
    
    >>>222ss
    
    请重新输入 invalid literal for int() with base 10: '222ss'
    
    >>>11
    
    我是try外面的逻辑,我可以正常运行

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-18 12:16 , Processed in 0.107953 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表