python错误捕获

2018-06-05  本文已影响8人  酒深巷子Ya
python 错误捕获:try...except...finally...

程序在运行的过程中,不可避免的总要出现错误,和其它语言一样,python提供了一套错误捕获机制:try...except...finally... 例如:

def division(x, y):
    try:
        result = x / y
        return result
    except ZeroDivisionError:
        print('***************** y = ', y)
    except TypeError:
        print('************* 类型不对')
    finally: #finally 始终会执行
        print('end ...')
print(division(2, '3'))

上述事例中执行到: result = x / y 由于传入的y是字符串,(算术运算只是是int 或 float 类型) 则会执行except TypeError: 打印************* 类型不对 然后执行finally ,return result则不会执行。

抛出错误:因为错误本身是一个类,捕获一个错误就是捕获到该类的一个实例。Python的内置函数会抛出很多类型的错误,我们也可以自定义错误类型。

如果要抛出错误,首先根据需要,可以定义一个错误的类,选择好继承关系,然后,用raise语句抛出一个错误的实例,例如:

class Invalid(ValueError):
    pass

def division(x, y):
    try:
        result = x / y
        return result
    except Exception as e:
        raise Invalid('非法输入', y)
    finally:
        print('end ...')

print(division(2, '3'))

Traceback (most recent call last):
File "Test.py", line 15, in <module>
print(division(2, '3'))
File "Test.py", line 11, in division
raise Invalid('非法输入', y)
main.Invalid: ('非法输入', '3')

错误记录:使用logging模块,通过配置,logging还可以把错误记录到日志文件里。
import logging

def division(x, y):
    try:
        result = x / y
        return result
    except Exception as e:
        logging.exception(e)
    finally:
        print('end ...')
print(division(2, '3'))
上一篇 下一篇

猜你喜欢

热点阅读