2020-12-23

python异常处理

  1. try…except结构
    异常处理结构中最常见也最基本的结构。其中try子句中的代码块包含可能出现的语句,而except子句用来不做相应的异常,except子句中的代码块用来处理异常。如果try中的代码块没有出现异常,则继续往下执行异常处理结构后面的代码;如果出现异常并且被except子句捕获,则执行except子句中的异常处理代码;如果出现异常单没有被except捕获,则继续往外层抛出;如果所有层都没有捕获并处理该异常,则程序终止并将该异常抛给最终用户。语法结构如下:try: try块except Exception[as reason]: exception块 如果要捕获所有类型异常,可以使用BaseException,即Python异常类的基类,代码格式如下:try: …except BaseException as e: exception块
  2. try …except…else结构 带else子句的异常处理结构是一种特殊形式的选择结构。如果try中的代码抛出了异常,并且被某个except捕获,则执行相应的异常处理代码,这种情况下不会执行else中的代码,依赖于try代码块成功执行的代码都应该放到else代码块中;如果try中的代码没有抛出任何异常,则执行else块中的代码。 工作原理:Python尝试执行try代码块中的代码;只有可能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行的代码,这些代码应放在else代码块中。except代码块告诉Python,如果他尝试运行try代码块中的代码时引发了指定的异常,该怎么办。通过预测可能发生错误的代码,可编写健壮的程序,它们即使面临无效数据或缺少资源,也能继续运行,从而能抵御无意的影虎错误和恶意的攻击。
  3. 带有多个except的try结构 在实际开发中,同一段代码可能会抛出多个异常,需要针对不同异常类型进行相应的处理。为了支持多个异常的捕捉和处理,Python提供了带有过个except的异常处理结构,类似于多分支选择结构。一旦某个except捕获了异常,则后面剩余的except子句将不会再执行。 将要捕获的异常卸载一个元组中,可以使用一个except语句捕获多个异常,并且共用同一段异常处理代码,当然,除非确定要捕获的多个异常可以使用同一段代码来处理,否则并不建议这样做。
  4. try…except…finally结构 该结构指那个,finally自剧中的语句块无论是否发生异常都会执行,常用来做一些清理工作以释放try自剧中申请的资源。 需要注意的问题是,如果try子句中的异常没有被捕获和处理,或者except子句或else子句中的代码出现了异常,那么这些异常将会在finally子句执行完成后再次抛出。finally中的代码也可能会抛出异常,使用带有finally子句的异常处理结构时,应尽量避免在子句中使用return语句,否则可能会出现出乎意料的错误。
  5. 断言 Python在unittest.TestCase类中提过了很多断言的方法。断言方法检查你认为该满足的条件是否确实满足。如果不满足Python将引发异常。语法: assert expression[,reason] assert语句一般用于对程序某个时刻必须满足的条件进行验证,仅当”debug” 为True时有效。当PYthon脚本以_()选项编译为字节码文件是,assert语句将被移除以提高运行速度。
  6. 上下文管理 使用上下文管理语句with可以自动管理资源,在代码块执行完毕后自动还原进入改代码块之前的现场或上下文。不论何种原因跳出with块,也不论是否发生异常,总能保证资源被正确释放,大大简化了程序员的工作,常用于文件操作、网络通信之类的场合。 with语句的语法如下: with context_expr [as var]: with块7. 用sys模块回溯最后的异常 当发生异常时Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这是可以使用sys模块回溯最近一次异常。语法为:import systry: blockexcept: t==sys.exc_info() print(t) sys.exc_info()返回值是一个三元组(type,value/message,traceback)。其中,type表示异常的类型,value/message表示异常的信息或者参数,而traceback则包含调用栈信息的对象。 sys.exc_info()可以直接定位最终引发异常的原因,结果比较简洁,但是缺点是难以直接确定引发异常的代码位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值