You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.7 KiB
2.7 KiB
1.2.5 异常处理
异常的基本概念
究竟什么是异常呢?下面的例子可以让你茅塞顿开:
x, y = 12, 5
a = x / y
print(A) #拼写错误,Python对大小写敏感, 并未定义变量A
1/0
当Python
检测到一个错误时,解释器就会指出当前程序流已经无法继续执行,这时候就出现了异常。当程序出现错误时Python
会自动引发异常,程序员也可以通过raise
语句显式地引发异常。
try...except...结构
异常处理结构中最常见也最基本的结构是try...except...
结构。try
子句中的代码块包含可能出现异常的语句,而except
子句用来捕捉相应的异常,except
子句中的代码块用来处理异常。
try:
try 块 #被监控的语句,可能引发异常
except Exception,e:
except 块 #处理异常的代码
如果try
中的代码块没有出现异常,则跳过except
块执行后面的代码,如果出现异常并被except
捕获,则执行except
块中的代码,如果出现异常但未被except
捕获,则继续向外层抛出。如果所有层都没有捕获并处理该异常,则程序终止并将异常抛给用户。
else与finally
另一种常用的结构是try...except...else...
语句。如果try
中的代码抛出异常,并被某个except
捕捉则执行except
块中的内容,这种情况下不执行else
的内容,如果try
中的代码没有发生异常,则执行else
块。例如:
a_list=['abc','def','ghi']
print('请输入字符串序号')
while True:
n=input()
try:
print a_list[n]
except IndexError:
print('输入不正确')
else:
break
还有一种异常处理结构是try...except...finally...
结构。该结构中,finally
子句中的代码无论异常是否发生都会被执行。它常用来做一些清理工作以释放资源。
例如:
try:
f=open('test.txt','r')
finally:
f.close()
自定义异常的方法
Python
有许多内置异常类,如果需要的话也可以继承Python
的内置异常类来实现自定义异常类,例如:
class ShortInputException(Exception):
#自己定义的异常类
def __init__(self,length,atleast):
Exception.__init__(self)
self.length=length
self.atleast=atleast
def __str__(self):
return '输入的长度是 %d, 长度至少应是 %d' %(self.length, self.atleast)
try:
s=raw_input('请输入:')
if len(s) < 3:
raise ShortInputException(len(s), 3)
except ShortInputException as e:
print(e)
else:
print('无异常发生')