Python中捕获错误的用法=====try与except的
笔者讲讲Python中捕获错误的用法,增强代码鲁棒性必不可少的语句,try except finally
1、捕获错误的因果由来:
程序中某一句代码可能执行出错,如果不去处理,后面的所有程序都无法执行,但是如果去判断,又需要将所有数据的判断都执行一边,较为繁琐.
因此就引出捕获错误,当执行有错误的时候,直接对该错误进行捕获,执行对应的错误,如果没有错误,就顺利执行之后的程序。
基本语句格式:
try:
可能出现错误的程序代码
except (Exception)as e:
出现错误之后需要执行的程序
finally
不管错误出现与否,都执行的代码
Exception为大多数错误的集合,当不知道是何种错误的时候,就采用这个,一般都可以处理。
常见错误类型:
错误类型 | 描述 |
---|---|
BaseException | 所有异常的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AttributeError | 对象没有这个属性 |
ImportError | 导入模块/对象失败 |
MemoryError | 内存溢出错误 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
ValueError | 传入无效的参数 |
RuntimeError | 一般的运行时错误 |
UnicodeError | Unicode 相关的错误 |
NameError | 未声明/初始化对象 (没有属性) |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
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)
2、起因:
出现解码错误:
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
3、解决问题的办法:
使用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
=
版权声明:
作者:ZhangYixi
链接:http://zyixi.xyz/python%e4%b8%ad%e6%8d%95%e8%8e%b7%e9%94%99%e8%af%af%e7%9a%84%e7%94%a8%e6%b3%95try%e4%b8%8eexcept%e7%9a%84/
来源:一西站点
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论