用 try except()方法 来处理 python程序中的异常(个人笔记)

工作原理

  • 在编写这段代码的时候, 我们就可以预料到,可能用户会输入非数字的字符,这样用int转化就会出错,导致整个程序就退出了。

    用 try 和 except 就可以 完善这个程序

while True:
    try:
        miles = input('请输入英里数:')
        km = int(miles) * 1.609344
        print(f'等于{km}公里')
    except ValueError:
        print('你输入了非数字字符')

try 下面缩进的3行代码可以看成是 保护区 中的代码。

如果执行保护区中代码时,出现异常,解释器会结束保护区中后续代码的执行,并检查这个异常的类型是否匹配后面的except 语句中声明的类型。

如果匹配上,解释器知道程序对此种异常是预料到的,并且有对应的处理方案,也就是匹配的except下面缩进的代码。解释器就执行匹配的except下面缩进的代码,不会因此中止程序。

上面的例子中,执行 try 下面缩进的代码时,如果用户输入了 hello 这样的非数字, 就会在这行语句处

km = int(miles) * 1.609344

产生 ValueError 类型的异常, 解释器就会去查看后面的 except 语句是否声明了对 ValueError 异常的处理。

发现有, 就会执行后面缩进的代码。也就是这句代码

print('你输入了非数字字符')

except 后面缩进的代码 就是对这种类型错误 的一种处理

既然程序已经知道如何处理这种问题, 就不需要结束执行,只需要执行完 处理代码后, 进行原来正常的执行流程。

在这里,就是继续 while True 循环。


如果一个程序有几个错误怎么办

  • 如果我们开发程序的时候,估计某个代码段中可能出现好几种类型的异常,可以使用多个except 代码段,分别捕获多种类型的异常
try:
    choice = input('输入你的选择:')
    if choice == '1':
        100/0
    elif choice == '2':
        [][2]
except ZeroDivisionError:
    print ('出现 ZeroDivisionError')
except IndexError  :
    print ('出现 IndexError')

获取异常对象

  • 我们使用except 语句匹配异常类型的时候, 可以使用as关键字,后面加一个变量名,这样,运行代码的时候,当try中的语句产生异常对象时,就会 把产生的异常对象赋值给as后的变量
try:
    100/0
except ZeroDivisionError as e:
    print (f'异常对象信息:{e}')

在这里插入图片描述

产生的异常对象赋值给了变量 e。

这样我们就可以在后续的代码中得到产生的异常对象的信息。


匹配所有异常

  • 因为所有的异常都是 Exception 的子类。 所以 Exception能匹配所有类型的异常。
try:
    100/0
except Exception as e:
    print('未知异常:', e)
  • except 后面 没有写异常的类型,也表示匹配所有的异常。
try:
    100/0
except:
    print('未知异常:')

获取详细的异常信息

  • 在except下面缩进代码中,使用traceback模块里面的format_exc函数,可以显示异常的信息 和 异常产生处的函数调用栈的信息。
import traceback

try:
    100/0
except :
    print(traceback.format_exc())

在这里插入图片描述
会打印出导致异常的详细的函数调用栈的信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值