实践项目参考答案

实践项目参考答案

 

本章主要讲了python程序的调试,当程序有BUG或异常的时候,我们如何调试代码找出问题点。其实在本章之前的章节我们做练习的时候都会遇到各种各样的错语和异常,最初当不知道程序哪里出错的情况下不可否认的都使用了print语句进行输出并调试代码。没错print也是调试代码的一种工具,直观简单,但也有缺点,就是调试好后要删除print语句,也是件麻烦事,于是就有了本章介绍的assert(断言),logging(日志)以及各种调试工具的出现。

首先来回顾一下python的异常。

一.python常见的异常类型

异常名称 描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF 标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
LookupError无效数据查询的基类
IndexError序列中没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

二.python异常处理

python处理异常的完整语句如下:实际程序中并不是每个语句都要用上,可以组合起来用。

具体用法请参见:

三.抛出异常

抛出异常使用raise语句。

语法:raise Exception(‘出错信息的字符串’)

此语句直接在交互模式下运行则会直接报错并返回Exception函数中的字符串。一般情况下raise语句用在函数中,try和except语句在调用该函数的代码中,在except语句中接收exception函数作为参数。

四.traceback模块

使用traceback模块可以跟踪异常并得到更祥细的出错信息,其实程序如果没有进行异常处理但是确实有异常存在的时候,从屏幕输出的信息来看,我们都会看很祥细的出错信息,包括哪一行出错,是什么错误等等,这应该就是traceback模块返回的信息,只是python本身帮我们抛出了异常。

在交互模式下,先导入traceback模块,通过help()就可以查看traceback的帮助信息。

五.断言assert

使用assert语句检查,如果失败就抛出异常

语法:

例如:

六.logging日志模块

Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,共有5个级别

级别日志函数描述
DEBUGlogging.debug()最低级别,用于小细节。通常只有在诊断问题时,你才会关心这些信息
INFOlogging.info()用于记录程序中一般的事件信息,或确认一切工作正常
WARNINGlogging.warning()用于表示可能的问题,它不阻止程序的工作,但将来可能会
ERRORlogging.error()用于记录错误,它导致程序做某事失败
CRITICALlogging.critical()最高级别。用于表示致命的错误,它导致或将要导致程序完全停止

使用语法:

format,定义了最终log信息的顺序,结构和内容。

禁用日志

将日志写入文件

7.实践项目参考答案

04-26 11:33