异常
一,【异常】
Try/expect 捕捉由python或你引发的异常并恢复
Try/finally 无论异常是否发生,执行清理行为
Raise 手动在代码中触发异常
Assert 有条件地在程序代码中触发异常
二【异常类型】
AssertionError assert语句失败
AttributeError 试图访问一个对象没有属性
IOError 输入输出异常,基本上是无法打开文件
ImportErrot 无法引入模块或者包,基本上是路径问题
IndentationEError 语法错误,代码没有正确的对奇
IndexError 下表索引超出序列边界
KeyError 试图访问你下标里不存在的健
KeyboardInterrupt CTRL+C被按下
NameError 使用一个还未赋予对象的变量
SyntaxError python代码逻辑语法出错,不能执行
TypeError 传入的对象类型与要求不符
UnboundLocalError 试图访问一个还为设置的全局变量,基本上是由于另外一个同名的全局变量导致你认为在访问
ValueError 传入一个不被期望的值,即使类型正确
下面我们通过例子来看一下:
#!/usr/bin/python
while True:
try:
x=input('please input the number:')
y=input('please input the number:')
value=x/y
print value
except:
print 'invalid input,please try again'
else:
break
这里的循环只有没有异常的时候才会退出(由else字句中的break语句退出),只要有错误发生,程序就会要求重新输入
编写自己的异常
一个异常就是一个类,即类Exception的一个子类,现在编写UppercaseException,在一个字符串中碰到大写字母会被抛出
>> class UppercaseException(Exception):
... pass
...
>>> words=['eeenie','meenie','MO']
>>> for word in words:
... if word.isupper():
... raise UppercaseException(word)
...
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
__main__.UppercaseException: MO
即使没有定义UppercaseException的行为,也可以通过继承父类的Exception在抛出异常时输出错误提示。
我们创建了我们自己的异常类型,其实我们可以使用任何预定义的异常/错误。这个新
的异常类型是ShortInputException类。它有两个域——length是给定输入的长度,atleast则是程序期望的最小长度。
在except从句中,我们提供了错误类和用来表示错误/异常对象的变量。这与函数调用中的形参
和实参概念类似。在这个特别的except从句中,我们使用异常对象的length和atleast
#!/usr/bin/python
class ShortError(Exception):
def __init__(self,length,atleast):
Exception.__init__(self)
self.length=length
self.atleast=atleast
try:
s=raw_input('please input your want to input:')
if len(s)<3:
raise ShortError(len(s),3)
except EOFError:
print 'false'
except ShortError,x:
print 'xiao'
else:
print 'vv'