Begin,Python-异常处理与调试

看完了第三部分,接下来我们讲讲第四部分 Python异常处理与调试

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。例如,用Python开发web项目的时候,如果后台报错了,我们并不希望页面展示给客户的是一堆的系统Traceback报错信息,而是跳转到一个提示友好信息的页面,比如告诉用户:“服务器暂时有问题,请联系系统管理员。”

异常处理:

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。

try的工作原理是,当开始一个try语句后,Python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

如果当try后的语句执行时发生异常,Python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。

如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。

如果在try子句执行时没有发生异常,Python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

看看左边和右边的两个例子,左边的例子打开一个文件,当文件不存在的时候抛出异常,except IOError 打印没有找到文件或读取文件失败 最后的try-finally 语句无论是否发生异常都将执行最后的代码,输出“最后总是要执行我”

右边的例子是不带任何异常类型使用except,但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。所以我们开发代码的时候,用左边的方式来实现。

这里列举了一些Python的标准异常

BaseException:所有异常的基类

SystemExit:解释器请求退出

KeyboardInterrupt:用户中断执行(通常是输入^C)

Exception:常规错误的基类

StopIteration:迭代器没有更多的值

GeneratorExit:生成器(generator)发生异常来通知退出

StandardError:所有的内建标准异常的基类

ArithmeticError:所有数值计算错误的基类

FloatingPointError:浮点计算错误

OverflowError:数值运算超出最大限制

ZeroDivisionError:除(或取模)零 (所有数据类型)

Python的标准异常

AssertionError:断言语句失败

AttributeError:对象没有这个属性

EOFError:没有内建输入,到达EOF 标记

EnvironmentError:操作系统错误的基类

IOError:输入/输出操作失败

OSError:操作系统错误

WindowsError:系统调用失败

ImportError:导入模块/对象失败

LookupError:无效数据查询的基类

IndexError:序列中没有此索引(index)

KeyError:映射中没有这个键

MemoryError:内存溢出错误(对于Python 解释器不是致命的)

NameError:未声明/初始化对象 (没有属性)

UnboundLocalError:访问未初始化的本地变量

Python的标准异常

ReferenceError:弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError:一般的运行时错误

NotImplementedError:尚未实现的方法

SyntaxError:Python 语法错误

IndentationError:缩进错误

TabError:Tab 和空格混用

SystemError:一般的解释器系统错误

TypeError:对类型无效的操作

ValueError:传入无效的参数

UnicodeError:Unicode 相关的错误

UnicodeDecodeError:Unicode 解码时的错误

UnicodeEncodeError:Unicode 编码时错误

UnicodeTranslateError:Unicode 转换时错误

Warning:警告的基类

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180713G1I36U00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券