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

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

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

    里的as e可以省略。

    示例:

    1. #!/usr/bin/python
    2. # coding: utf-8
    3. try:
    4. r = 100 / 0
    5. print('result is %s'% r)
    6. except ValueError as e:
    7. print('ValueError: ', e)
    8. except ZeroDivisionError as e:
    9. print('ZeroDivisionError: ', e)
    10. except BaseException as e:
    11. finally:
    12. pass
    1. ('ZeroDivisionError: ', ZeroDivisionError('integer division or modulo by zero',))

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

    输出:

    1. Illegal value: 0

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

    错误级别:

    1. CRITICAL = 50
    2. FATAL = CRITICAL
    3. ERROR = 40
    4. WARNING = 30
    5. WARN = WARNING
    6. INFO = 20
    7. DEBUG = 10
    8. NOTSET = 0

    示例:

    1. #!/usr/bin/python
    2. # coding: utf-8
    3. logging.basicConfig(level=logging.INFO)
    4. def cal(m, n):
    5. # raise ValueError('Illegal value: %d' % n)
    6. logging.info('Illegal value: %d' % n)
    7. return m * n
    8. try:
    9. r = cal(6, 0)
    10. print(r)
    11. except Exception as e:
    12. print(e)

    输出:

    1. 0

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