Python3学习笔记(4)——异常处理
来源:互联网 发布:mac的usb配件已停用 编辑:程序博客网 时间:2024/06/06 00:52
1 异常处理
1.1 try-except语句
异常发生时,剩余代码忽略,解释器搜索异常处理器,若没找到处理器,则将异常向上移交给调用者的try中去处理,直到找到合适的处理器。若到顶层仍未找到,则认为是未处理的异常,显示跟踪信息,然后退出。
因此,不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了。
try-except语句1
try-except语句——处理多个异常
try:
try_suite #监控此处异常
except Exception1 [, reason1]:
except_suite1 #异常处理器1
except Exception2 [, reason2]:
except_suite2 #异常处理器2
try:
try_suite #监控此处异常
except (Exception1, Exception2...)[, reason]:
[except_suite #异常处理器]
Exception2若是Exception1的子类,则无法捕获。
不要写【except:】来捕获所有异常。可以捕获特定异常并忽略它们, 或是捕获所有异常并采取特定的动作.
使用 pass 忽略某异常,会返回None。
1.2 异常参数reason
reason是一个元组,和异常类实例的args属性绑定。对于大多内建异常(从 StandardError 派生的异常), 这个元组只包含一个指示错误原因的字符串。
异常处理即使用pass忽略,reason也保留了异常信息。
调用str(reason)增加可读性(其实是调用类的__str__()方法),作为异常信息返回。
1.3 raise关键字
raise [Exception [, args [, traceback]]]
允许程序员强制抛出一个指定的异常。可以在except中重新抛出异常,供调用者处理。
raise Exception('error','xxx') 或 raise Exception, ('error','xxx')
#初始化一个异常类,多个参数接收为元组,传递给该对象的args属性。
执行raise语句时,Python会创建指定的异常类的一个对象。raise语句还可指定对异常对象进行初始化的参数。为此,在异常类的名称后添加一个逗号以及指定的参数(或者由参数构成的一个元组),即args。
1.4 异常继承关系
BaseException
Exception
错误条件引起的异常
KeyboardInterrupt
按下了 CTRL-C (^C) , 想要关闭 Python
SystemExit
由于当前 Python 应用程序需要退出
(all other current built-in exceptions) 所有当前内建异常
1.5 try的其它子句
1.5.1 else子句
在try 范围中没有异常被检测到时,执行else 子句。
1.5.2 try-finally语句
用来维持一致的行为。无论try中是否发生异常,finally都会执行。
当在try范围中产生一个异常时,会立即跳转到finally语句段.当finally中的所有代码都执行完毕后,会继续向上一层引发异常(finally 会自动的重新引发异常).
①可以嵌套语句:try(try-except)-finally,简化为try-except-finally
②或try(try-finally)-except来捕获finally中的异常(但是finally在异常处理之前执行,不是最后执行清理工作)
1.5.3 try-except-else-finally语句
1.6 with语句和上下文管理器
with context_expr [as var]:
with_suite
with open('/etc/passwd', 'r') as f:
for eachLine in f:
# ...do stuff with eachLine or f...
完成准备工作,若正常则把文件对象赋给f。无论是否发生异常,都会执行清理工作。
with所求值的对象必须是一个上下文管理器。
上下文管理器(Context Manager)是支持上下文管理协议的对象,这种对象实现了__enter__(self)和 __exit__(self,type,value,trace):
1.6.1 __enter__(self)方法
with后的上下文管理器调用__enter__()方法,如果使用了 as 子句,该方法的返回值赋给as后边的变量(可以是元组)。
1.6.2 __exit__(self,type,value,trace)
self:对象引用。type:异常类。value:异常信息。trace: 错误追踪。
当with后边代码执行完成后,不管是否执行过程中是否发生了异常,都会调用前边对象的__exit__()方法。
如果执行过程中没有出现异常,或者语句体中执行了语句 break/continue/return,则以 None 作为参数调用__exit__(None, None, None) ;如果执行过程中出现异常,则使用 sys.exc_info 得到的异常信息为参数调用__exit__(exc_type, exc_value, exc_traceback)
如果 __exit__() 返回 True,则异常被忽略,如果返回False,则重新抛出异常,由外层代码对异常进行处理。
1.6.3 相关模块contextlib
为使用with 语句的上下文对象工具
1.7 自定义异常
classMyError(Exception):
def __init__(self,val):
self.myVal=val
def __str__(self):
return repr(self.value)
raiseMyError('error')
1.8 断言assert
assert expression[, arguments]
# 若表达式expression不成立,则引发AssertionError异常,输出arguments信息。
可将assert语句放在try语句块中。
- Python3学习笔记(4)——异常处理
- Python3.3 学习笔记5 - 异常处理
- Python3学习(29)--异常处理
- 【Java】学习笔记——异常处理
- python学习笔记——异常处理
- Python 学习笔记 ——异常处理
- C++学习笔记——异常处理
- Python学习笔记(4)--异常处理
- JNI学习笔记(七)——异常处理
- springmvc学习笔记(29)——HandleException处理异常
- Python学习笔记(八)——Python 异常处理
- Python学习笔记(九)——异常处理
- 异常机制—学习笔记—java中异常处理
- Python3学习七之异常处理
- 异常处理学习笔记
- C#学习笔记13——异常处理
- java学习笔记《面向对象编程》——异常处理
- 黑马程序员——Java异常处理学习笔记
- Wilco的Windows7环境下MyEclipse+Nutch2.2.1+Mysql搭建
- Unity 3D 对 C#6.0 和 7.0 的支持
- Jungle Roads
- @RequestParam和@PathVariable的区别(学习笔记)
- 代码实现最简单Handler
- Python3学习笔记(4)——异常处理
- ubuntu服务器 itchat二维码登陆问题
- sed删除指定字符开头的行的上一行的指定字符
- es6更新
- Python3学习笔记(5)——函数和函数式编程
- spring websocket性能测试
- 生成一个指定长度的随机字符串
- JavaScript之Math对象详解
- 面试题10 :二进制中1的个数