示例
# -*- coding: cp936 -*-
#异常
#使用raise函数引发异常
#raise Exception
#raise Exception('hyperdrive overload') #自定义错误信息
import exceptions
#dir函数可列出模块内容
#exceptions模块中的异常类都可用在raise语句中
#Exception是所有异常类的基类
print dir(exceptions)
#定义自己的异常类
#必须直接或间接继承Exception
class SomeCustomException(Exception): pass
#捕捉异常
#Python中的异常若没处理也会向上传播
try:
x = input('Enter the first number: ')
y = input('Enter the second number: ')
print x / y
except ZeroDivisionError:
print "The second number can't be zero!"
#也可以加上raise语句把异常继续向上传播
except TypeError:
print "That wasn't a number. was it?"
#也可以用元组的方式同时捕捉多个异常,然后用同一个代码块处理。
#except (ZeroDivisionError, TypeError, ...):
try:
x = input('Enter the first number: ')
y = input('Enter the second number: ')
print x / y
except (ZeroDivisionError,TypeError), e:#声明个异常对象e
print e #直接打印出异常
#在Python3.0中需要这样写
#except (ZeroDivisionError,TypeError) as e:
#捕捉所有异常
#写法一
#except:
#写法二(建议用这种)
#except: Exception, e
try:
print 'A simple task'
except:
print 'What? Something went wrong?'
else:#未发生异常时,会执行else后的代码
print 'Ah...It went as planned.'
finally:#无论是否发生异常都会执行finally后的代码
print 'Cleaning up...'
#Python2.5之前的版本finally需要独立使用
#下面代码用于忽略警告
import warnings
#warnings.warn("警告信息")
warnings.filterwarnings("ignore")
warnings.warn("被忽略的警告信息")
运行测试
| 一些内建异常 | |
| 类 名 | 描 述 |
|
Exception |
所有异常的基类 |
|
AttributeError |
特性引用或赋值失败时引发 |
|
IOError |
试图打开不存在的文件(包括其他情况)时引发 |
|
IndexError |
在使用序列中不存在的索引时引发 |
|
KeyError |
在使用映射中不存在的键时引发 |
|
NameError |
在找不到名字(变量)时引发 |
|
SyntaxError |
在代码为错误形式时引发 |
|
TypeError |
在内建操作或者函数应用于错误类型的对象时引发 |
|
ValueError |
在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发 |
|
ZeroDivisionError |
在除法或者模除操作的第二个参数为0时引发 |