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/
来源:一西站点
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录