文章目录
- 自定义异常
- 使用raise抛出异常
- try...except捕获异常
- 异常的传递
- assert语句的使用
异常机制是指程序出现错误后,程序的处理方法。
当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。Exception
类是常用的异常类,该类包括StandardError
,StopIteration
, GeneratorExit
, Warning
等异常类。
-
StandardError
类是python中的错误异常,如果程序上出现逻辑错误, 将引发该异常。StandardError类是所有内敛异常的基类,放置在默认的命名空间中,因此使用IOError, EOFError, ImportError等类,不需要导入exception模块。 -
StopIteration
类判断循环是否执行到尾部,如果循环到尾部,则抛出该异常。 -
GeneratorExit
类是由Generator函数引发的异常,当调用close()时引发该异常。 -
Warning
类表示程序中的代码引起的警告。
自定义异常
python
允许程序员自定义异常,用于描述python
中没有涉及的异常情况,自定义异常必须继承Exception类,自定义异常按照命名规范。
class DivisionException(Exception):
def __init__(self, x, y):
Exception.__init__(self, x, y) #调用子类的__init__进行初始化
self.x = x
self.y = y
if __name__ == "__main__":
try:
x = 3
y = 2
if x % y > 0: #如果大于0, 则不能被初始化,抛出异常
print(x / y)
raise DivisionException(x, y)
except DivisionException: #div 表示DivisionException的实例对象
print("DivisionExcetion: x/y")
使用raise抛出异常
当程序出现错误,python
会自动引发异常,也可以通过raise
显示地引发异常。一旦执行了raise
语句,raise
后面的语句将不能执行。
try:
s = None
if s is None:
print "s 是空对象"
raise NameError #如果引发NameError异常,后面的代码将不能执行
print len(s)
except TypeError:
print "空对象没有长度"
try…except捕获异常
try...except
用于处理问题语句,捕获可能出现的异常。try
子句中的代码块放置可能出现异常的语句,except
子句中的代码块处理异常。语法如下:
try:
# 尝试执行的代码
pass
except 错误类型1:
pass
except (错误类型2, 错误类型3):
pass
except Exception as result: # 捕获未知异常
print("未知错误 %s" % result)
演示try...except
语句捕获IOError
异常:
try:
file("hello.txt", "r") #如果文件不存在,引发异常
print "读文件"
except IOError: #捕获IO异常
print "文件不存在"
except: #其它异常
print "程序异常"
try...finally
的使用方法。try...except
后还可以添加一个finally
子句。无论异常是否发生,finally
子句都会被执行。
try:
f = open("hello.txt", "r")
try:
print f.read(5)
except:
print "读文件异常"
finally:
print "释放资源"
f.close()
except IOError:
print "文件不存在"
异常的传递
当函数/方法执行出现异常,会将异常传递给函数/方法的调用一方。如果传递到主程序,仍然没有异常处理,程序才会被终止。
def demo1():
num = int(input("Please Input Integer"))
return num
def demo2():
return demo1()
try:
demo2()
except Exception as result:
print("The Error Is: {}".format(result))
assert语句的使用
assert
语句用于检测某个条件表达式是否为真。assert
语句又称为断言语句。