好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python_学习之异常处理

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

查看更多关于Python_学习之异常处理的详细内容...

  阅读:36次