1、类
2、 内建异常类
Exception 所有异常的基类
AttributeError 特性或赋值失败引发
IOError 试图打开文件时引发的错误
IndexError 使用seq不存在的索引
KeyError 映射中不存在的key
NameError 找不到名字(变量)时引发
SyntaxError 代码为错误时引发
TypeError 内建操作或函数应用于错误类型的对象
ValueError 内建操作或函数应用于正确的对象,但是该对象使用的值不合适
ZeroDivisionError 除法时除数为0
3、传递异常的开启与关闭
class MuffledCalculator:
muffled=False
def calc(self,expr):
try:
return eval(expr) #eval,执行str,如进行求值等
except ZeroDivisionError:
if self.muffled:
print 'Division by zero is illegal'
else:
raise
except TypeError:
if self.muffled:
print'you should enter num'
#把这两个异常合写:
except(ZeroDivisionError,TypeError):
>>>calculator=MuffledCalculator()
>>>calculator.muffled=True
>>>捕捉异常开启
>>>没有‘calculator.muffled=True’时,
>>>捕捉异常关闭
#这个办法很好,可以控制一个程序的开启与关闭
4、exception不被处理的话,会漂浮到主程序。
>>>def faulty():
raise Exception('Something is wrong')
>>>def ignore_exception():
faulty()
>>>def handle_exception():
try:
faulty()
except:
print 'Exception handled'
>>>ignore_exception()
引发错误
>>>handle_exception()
Exception handled
错误到这才被处理
5、关于代码效率
#下为伪代码:
def describePerson(person):
print 'Description of',person['name']
print 'Age:',person['age']
if 'occupation' in person:
print 'Occupation:',person['occupation']
这个代码效率不高,if句中对occupation查找了2次。
优化版,依旧是伪代码:
def describePerson(person):
print 'Description of',person['name']
print 'Age:',person['age']
try:
print 'Occupation'+person['occupation'] #这里打印职业时用加号而不是逗号,否则字符串‘Occupation’无论是否发生异常都会被输出。
else KeyError;
pass
6、上面的例子也说明了逗号与加号在print中的区别
print *+* ,这是执行了一个print命令
print *,* 这个可以算作是2个print命令,因为也可写成:
print *,
print *
另外 用逗号两个衔接之间有个去不掉的空格