Python学习—12 异常处理、调试
except用来捕获异常类型,常见的有ValueError、ZeroDivisionError,都继承基类BaseException。如果没有错误发生,则执行else。不管有没有错误发生,都会执行finally。
注意的是,只要一处except的捕获到了,不会继续捕获。
里的as e
可以省略。
示例:
#!/usr/bin/python
# coding: utf-8
try:
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:
finally:
pass
('ZeroDivisionError: ', ZeroDivisionError('integer division or modulo by zero',))
Python里使用raise语句抛出一个异常的实例:
输出:
Illegal value: 0
我们可以使用来调试程序,但如果到处是print()
,想关闭又得一个个去修改。使用logging类,我们可以记录各种级别的错误,通过配置参数,可以控制显示哪些错误记录。
错误级别:
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
示例:
#!/usr/bin/python
# coding: utf-8
logging.basicConfig(level=logging.INFO)
def cal(m, n):
# raise ValueError('Illegal value: %d' % n)
logging.info('Illegal value: %d' % n)
return m * n
try:
r = cal(6, 0)
print(r)
except Exception as e:
print(e)
输出:
0
这里设置错误级别是INFO
,那么将会显示WARN
、ERROR
、FATAL
级别的错误,DEBUG
、NOTSET
则不会显示。