第7章 异常处理

完整的异常处理流程

try … except … else … finally … [raise]

try后接except或finally,except可以有多个,finally只有一个

代码块作用备注
try业务代码try块应尽量简单,以便出现异常时快速定位到具体的行
except捕获异常先处理小异常(子类),后处理大异常(父类)
else向外传播try块无异常时,else块的代码放在try块下也一样
finally回收资源回收try块打开的物理资源,如数据库连接、网络连接
raise自行引发异常if …: raise

except

try块的业务代码异常时,跳转except块,对异常进行处理,避免程序报错并中断

捕获多个异常:写成元组即可,如:except (异常类1,异常类2,…): pass

捕获所有异常:不指定异常类,如:except: pass

输出异常信息:except Exception as e: print(e.args)

异常类对象的属性errnostrerrorargswith_traceback()
包含的信息编号描述编号 + 描述传播轨迹

系统内置的异常类

自定义的异常类通常继承Exception类或其子类

BaseExceptionExceptionArithmeticErrorZeroDivisionError
FloatingPointError
OverflowError
LookupErrorIndexError
KeyError
BufferError
GeneratorExit
KeyboardInterrupt
SystemExit

finally

总是会执行,无论其它代码块中是否有return或异常。块中可以包含完整的异常处理流程

例外:如果在except块中用os._exit(1)退出了python解释器,finally块不会执行

由于finally块总是会执行,finally下的return或raise会使其它代码块中的return或raise失效

raise

  1. 单独的raise——默认引发RuntimeError
  2. raise + 异常类
  3. raise + 异常对象

在except块中使用raise

except捕获系统异常,记录在日志中;raise引发自定义异常,反馈给用户

except Exception as e: raise AuctionException(e)

把原始异常Exception包装成AuctionException

在except块中的raise若不带参数,会引发整个except块的异常

# 异常传播轨迹

import traceback
try:
    pass
except:
    traceback.print_exc()
    format_exc()

print_exc的完整形式:print_exception(etype, value, tb, limit, file)

参数etypevaluetblimitfile
指定内容异常类型异常值traceback信息传播层数输出位置

未指定file时,输出到屏幕

异常处理规则

不要过度使用

对外部不可预知的错误才使用异常;对已知的、普通的错误,要编写处理代码

对异常的处理方式

  1. 修复
  2. 返回其它值
  3. 提示用户重新操作
  4. 传给上层调用者处理
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ailsa2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值