Python中捕获错误的用法=====try与except的

本文介绍了Python中捕获错误的用法,指出程序中某句代码出错若不处理会影响后续程序,逐一判断又繁琐。引出try except finally语句,介绍了基本格式,以除数为0、解码错误为例说明捕获错误可增强代码鲁棒性,出现错误时能直接处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔者讲讲Python中捕获错误的用法,增强代码鲁棒性必不可少的语句,try except finally

捕获错误的因果由来:

  程序中某一句代码可能执行出错,如果不去处理,后面的所有程序都无法执行但是如果去判断,又需要将所有数据的判断都执行一边,较为繁琐.

  因此就引出捕获错误,当执行有错误的时候,直接对该错误进行捕获,执行对应的错误,如果没有错误,就顺利执行之后的程序。

基本语句格式:

try:
      可能出现错误的程序代码
except (Exception)as e:
      出现错误之后需要执行的程序
finally
	  不管错误出现与否,都执行的代码

Exception为大多数错误的集合,当不知道是何种错误的时候,就采用这个,一般都可以处理。

常见错误类型:

错误类型描述
BaseException所有异常的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AttributeError对象没有这个属性
ImportError导入模块/对象失败
MemoryError内存溢出错误
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
ValueError传入无效的参数
RuntimeError一般的运行时错误
UnicodeErrorUnicode 相关的错误
NameError未声明/初始化对象 (没有属性)
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnboundLocalError访问未初始化的本地变量

比如下面这个实例,来看一下除数为0的错误的处理情况,

a=12
while(1):
    b= int(input("请输入一个数:"))
    try:
         c=a/b
         print("结果为:%d" % c)
    except ZeroDivisionError as e:
         print("除数不可以为0!")
    finally:
         print("b=%d" % b)

在这里插入图片描述

起因:

出现解码错误:

self.message.emit("current software version is {}".format(self._helper.get_did(0xB00A).decode("utf-8")))

decode为解码函数,将十六进制转换成utf-8,即字符换,

解码的十六进制为:

8c47aa000000000000000000000000000000000000000000

出现0x8c,则无法转换成utf-8,超过127

  如果判断,则需要对所有的数据都进行判断,然后去执行对应的程序,还需要获取数据的长度等等,就因为一个数据大于127,所以效率较低。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8c in position 0: invalid start byte

在这里插入图片描述

解决问题的办法:

  使用try except:当出现错误时,直接捕获编码错误,然后做相应的处理,则可以正常执行程序。

try:
   self.message.emit("current software version is {}".format(self._helper.get_did(0xB00A).decode("utf-8")))
   version_reported = True
except UnicodeDecodeError as e:
   self.message.emit("current software version is {}".format(self._helper.get_did(0xB00A)))
   self.message.emit("软件版本号无法解码,无法转换成字符!")
   version_reported = True

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张一西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值