例子:
def safe_float_2(obj):
try:tmp = float(obj)
except Exception, e:
print e
else:
print 'data is ok'
return tmp
finally:
print 'data is finally'
print safe_float_2('111111')
print safe_float_2('heloo')
print safe_float_2([1, 2, 2])
运行结果:
data is ok
data is finally
111111.0
could not convert string to float: heloo
data is finally
None
float() argument must be a string or a number
data is finally
None
try:需要执行的代码
except:捕捉到异常,需要执行的代码
else:未捕捉到异常,需要执行的代码,可选的
finally:无论是否捕捉到异常,都会执行的代码,常用于资源释放,可选的
raise:将本次异常提交给上层调用者,或者调用raise Exception("ba la ba la ......"),自己触发异常
标准异常类
BaseException:所有异常类的基类
SystemExit、KeyboardInterrupt 、Exception,派生于BaseException,剩余的其它类均派生于Exception。
为什么要用到异常处理
如果不去捕捉异常,服务器程序将会异常终止,不会给用户返回任何有帮助的友好信息,但是如果再设计和code时,能考虑到各种异常,为每种异常增加合理的异常处理,并返回友好的用户建议,不仅能使服务器不会无端终止,提高容错,更能大大提高用户体验。
exc_info的使用
import sys
import traceback
def safe_float_2(obj):
try:
tmp = float(obj)
except Exception, e:
print e
print "type:", sys.exc_info()[0]
print "value:", sys.exc_info()[1]
print "bt:", (traceback.extract_tb(sys.exc_info()[2]))
else:
print 'data is ok'
return tmp
finally:
print 'data is finally'
利用exc_info可以得到具体的异常type、value、出错堆栈,如果能把这3样东西打印出来,对于代码异常的处理将是非常有用的