工作中,当代码有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