看完了第三部分,接下来我们讲讲第四部分 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:警告的基类
领取专属 10元无门槛券
私享最新 技术干货