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

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('无异常发生')