工作中,当代码有bug或出现如数据库连接不上等异常导致程序本次请求处理失败时,是需要我们返回一个报错给请求方的,而不能因某次请求处理的失败导致程序宕机的,python可以通过异常处理来捕获异常
语法:
#方式一try:"""函数能力逻辑部分"""except异常类型1,异常类型2ase:"""出现异常时的处理逻辑"""#方式二try:"""函数能力逻辑部分"""exceptExceptionase:"""出现异常时的处理逻辑"""else:"""函数能力执行未出现异常时执行此部分"""#方式三try:"""函数能力逻辑部分"""exceptExceptionase:"""出现异常时的处理逻辑"""else:"""函数能力执行未出现异常时执行此部分"""finally:"""无论上面执行的结果如何,此部分逻辑都会被执行"""#注:异常类型有很多种,有些内部定义好的异常类型,比如IOError输入/输出操作失败ImportError导入模块/对象失败NameError未声明/初始化对象(没有属性)RuntimeError一般的运行时错误TypeError对类型无效的操作ValueError传入无效的参数Exception所有的错误类型都会被接收,当不知道会报什么类型的异常时,可以用其捕获,也是最常使用的如果指定了只捕获特定异常类型时,出现其他异常是不会捕获的,这时程序就会宕掉,这是不被允许的,故当你不确定异常类型时,建议Exception
主动抛出异常raise
语法:raise异常类型(异常说明描述)
python通过raise关键字,主动抛出异常#示例try:ifname=="p2p":raiseValueError("自定义异常信息说明")print("lifeisshortiusepython")exceptExceptionase:print(e)---当异常时报上面自定义的说明
断言
语法:assert条件表达式,"表达式不为真时抛出异常的说明信息"
try:assert1==2,"当前表达式不为真时,主动抛出异常"exceptExceptionase:print(e)
自定义异常类
#需要继承异常基类#创建classMyException(BaseException):def__init__(self,msg):self.msg=msgdef__str__(self):returnself.msg#使用try:raiseMyException("出现自定义的异常信息")exceptMyExceptionase:print(e)
工作中往往我们需要在异常发生时,知道到底那里出错了,这样我们才能更快的定位问题,从而解决问题,python也为我们考虑到了,可以通过内置traceback模块得以解决
importtracebackdeftest(name):try:ifname=="test":raiseError("justtesttheerrorlocation")print("")exceptExceptionase:print(f"异常信息为:{e},\n异常发生位置为:{traceback.format_exc()}")test("test")结果为:异常信息为:justtesttheerrorlocation,异常发生位置为:Traceback(mostrecentcalllast):File"D:/my_all_project/Frame_learning/py3异常学习.py",line63,intestraiseError("justtesttheerrorlocation")Error:justtesttheerrorlocation路人甲氏