Python学习--12 异常处理、调试

来源:互联网 发布:伴奏制作软件手机软件 编辑:程序博客网 时间:2024/06/05 19:29

异常捕获

语法格式:

try:    passexcept xxx as e:    passexcept xxx as e:    pass...else:    passfinally:    pass

except用来捕获异常类型,常见的有ValueError、ZeroDivisionError,都继承基类BaseException。如果没有错误发生,则执行else。不管有没有错误发生,都会执行finally。

注意的是,只要一处except的捕获到了,不会继续捕获。

except xxx as e里的as e可以省略。

示例:

#!/usr/bin/python# coding: utf-8try:    r = 100 / 0    print('result is %s'% r)except ValueError as e:    print('ValueError: ', e)except ZeroDivisionError as e:    print('ZeroDivisionError: ', e)except BaseException as e:    print('BaseException: ', e)finally:    pass

输出:

('ZeroDivisionError: ', ZeroDivisionError('integer division or modulo by zero',))

抛出异常

Python里使用raise语句抛出一个异常的实例:

#!/usr/bin/python# coding: utf-8def cal(m, n):    if n == 0:        raise ValueError('Illegal value: %d' % n)    return  m * ntry:    r = cal(6, 0)    print(r)except Exception as e:    print(e)

输出:

Illegal value: 0

使用logging类记录错误

我们可以使用print()来调试程序,但如果到处是print(),想关闭又得一个个去修改。使用logging类,我们可以记录各种级别的错误,通过配置参数,可以控制显示哪些错误记录。

错误级别:

CRITICAL = 50FATAL = CRITICALERROR = 40WARNING = 30WARN = WARNINGINFO = 20DEBUG = 10NOTSET = 0

对应的方法:

logging.critical()logging.fatal()logging.error()logging.warning()logging.warn()logging.info()logging.debug()

示例:

#!/usr/bin/python# coding: utf-8import logginglogging.basicConfig(level=logging.INFO)def cal(m, n):    if n == 0:        # raise ValueError('Illegal value: %d' % n)        logging.info('Illegal value: %d' % n)    return  m * ntry:    r = cal(6, 0)    print(r)except Exception as e:    print(e)

输出:

0INFO:root:Illegal value: 0

这里设置错误级别是INFO,那么将会显示WARNERRORFATAL级别的错误,DEBUGNOTSET则不会显示。

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用户代码生成的警告



0 0