Python之异常处理
一,异常处理
异常是Python程序在运行过程中引发的错误.如果程序中引发了未进行处理的异常,脚本就会由于异常而终止运行.
1.1异常处理的基本语法
try: 代码块(可能出现错误的语句) #如果expect后不跟任何内容,则此时它会捕获到所有的异常 #如果在except后跟着一个异常的类型,那么此时它只会捕获该类型的异常 # Exception 是所有异常类的父类,所以如果except后跟的是Exception,他也会捕获到所有的异常 # 可以在异常类后边跟着一个 as xx 此时xx就是异常对象 except 异常类型 as 异常名: 代码块(出现错误以后的处理方式) except 异常类型 as 异常名: 代码块(出现错误以后的处理方式) except 异常类型 as 异常名: 代码块(出现错误以后的处理方式) else: 代码块(没出错时要执行的语句) finally: 代码块(该代码块总会执行)
注: ①try是必须的,else有没有都行,except和finally至少有一个.
②Python所有的错误都是BaseException类派生的,常见的错误类型和继承关系看这里:
#expect语句主要有以下几种用法
except: #捕获所有异常
except: <异常名>: #捕获指定异常
except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2
except:<异常名>,<数据>:捕获指定异常及其附加的数据
except:<异常名 1,异常名 2>:<数据>:捕获异常名 1 或者异常名 2,及附加的数据
二 手工抛出异常
2.1 异常的传播
当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播;
如果函数中没有对异常进行处理,则异常会继续向函数调用处传播;
如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播;
直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息.
2.2用raise手工抛出异常
raise 异常名
raise 异常名,附加数据
raise 类名
2.3 assert语句
Python提供了一个断言语句assert expression,断定表达式expression成立,否则触发异常AssertionError
assert语法如下:
assert <条件测试>,<异常附加数据>
age='18' # 若表达式isinstance(age,int)返回值为False则触发异常AssertionError assert isinstance(age,int) # 等同于 if not isinstance(age,int): raise AssertionError
2.4 自定义异常类
只需要创建一个类继承Exception即可
class PoolEmptyError(Exception): # 可以通过继承Exception来定义一个全新的异常 def __init__(self,value='The proxy source is exhausted'): # 可以定制初始化方法 super(PoolEmptyError,self).__init__() self.value=value def __str__(self): # 可以定义该方法用来定制触发异常时打印异常值的格式 return '< %s >' %self.value class NetworkIOError(IOError): # 也可以在特定异常的基础上扩展一个相关的异常 pass raise PoolEmptyError # __main__.PoolEmptyError: < The proxy source is exhausted > raise NetworkIOError('连接被拒绝') # __main__.NetworkIOError: 连接被拒绝
浙公网安备 33010602011771号