工作中,当代码有bug或出现如数据库连接不上等异常导致程序本次请求处理失败时,是需要我们返回一个报错给请求方的,而不能因某次请求处理的失败导致程序宕机的,python可以通过异常处理来捕获异常
语法:
# 方式一 try: """函数能力逻辑部分""" except 异常类型1,异常类型2 as e: """出现异常时的处理逻辑""" # 方式二 try: """函数能力逻辑部分""" except Exception as e: """出现异常时的处理逻辑""" else: """函数能力执行未出现异常时执行此部分""" # 方式三【我最常使用的方式】 try: """函数能力逻辑部分""" except Exception as e: """出现异常时的处理逻辑""" else: """函数能力执行未出现异常时执行此部分""" finally: """无论上面执行的结果如何,此部分逻辑都会被执行""" # 注:异常类型有很多种,有些内部定义好的异常类型,比如 IOError 输入/输出操作失败 ImportError 导入模块/对象失败 NameError 未声明/初始化对象 (没有属性) RuntimeError 一般的运行时错误 TypeError 对类型无效的操作 ValueError 传入无效的参数 Exception 所有的错误类型都会被接收,当不知道会报什么类型的异常时,可以用其捕获,也是最常使用的 如果指定了只捕获特定异常类型时,出现其他异常是不会捕获的,这时程序就会宕掉,这是不被允许的,故当你不确定异常类型时,建议Exception
主动抛出异常raise
语法:raise 异常类型(异常说明描述)
python 通过raise关键字,主动抛出异常
# 示例 try: if name == "p2p": raise ValueError("自定义异常信息说明") print("life is short i use python") except Exception as e: print(e) ---> 当异常时报上面自定义的说明
断言
语法:assert 条件表达式,"表达式不为真时抛出异常的说明信息"
try: assert 1 == 2, "当前表达式不为真时,主动抛出异常" except Exception as e: print(e)
自定义异常类
# 需要继承异常基类 # 创建 class MyException(BaseException): def __init__(self,msg): self.msg = msg def __str__(self): return self.msg # 使用 try: raise MyException("出现自定义的异常信息") except MyException as e: print(e)
工作中往往我们需要在异常发生时,知道到底那里出错了,这样我们才能更快的定位问题,从而解决问题,python也为我们考虑到了,可以通过内置traceback模块得以解决
import traceback def test(name): try: if name == "test": raise Error("just test the error location") print("666") except Exception as e: print(f"异常信息为:{e},\n异常发生位置为:{traceback.format_exc()}") test("test") 结果为: 异常信息为:just test the error location, 异常发生位置为:Traceback (most recent call last): File "D:/my_all_project/Frame_learning/py3异常学习.py", line 63, in test raise Error("just test the error location") Error: just test the error location
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did162769