稍微总结一下,否则总是忘。
x = 'abc'
def fetcher(obj, index):
return obj[index]
fetcher(x, 4)
输出:
File "test.py", line 6, in <module>
fetcher(x, 4)
File "test.py", line 4, in fetcher
return obj[index]
IndexError: string index out of range第一: try不仅捕获异常,而且会恢复执行
def catcher():
try:
fetcher(x, 4)
except:
print "got exception"
print "continuing"输出:got exception
continuing第二:无论try是否发生异常,finally总会执行
def catcher():
try:
fetcher(x, 4)
finally:
print 'after fecth'输出:after fecth
Traceback (most recent call last):
File "test.py", line 55, in <module>
catcher()
File "test.py", line 12, in catcher
fetcher(x, 4)
File "test.py", line 4, in fetcher
return obj[index]
IndexError: string index out of range第三:try无异常,才会执行else
def catcher():
try:
fetcher(x, 4)
except:
print "got exception"
else:
print "not exception"输出:got exceptiondef catcher():
try:
fetcher(x, 2)
except:
print "got exception"
else:
print "not exception"输出:not exceptionelse作用:没有else语句,当执行完try语句后,无法知道是没有发生异常,还是发生了异常并被处理过了。通过else可以清楚的区分开。
第四:利用raise传递异常
def catcher():
try:
fetcher(x, 4)
except:
print "got exception"
raise输出:got exception
Traceback (most recent call last):
File "test.py", line 37, in <module>
catcher()
File "test.py", line 22, in catcher
fetcher(x, 4)
File "test.py", line 4, in fetcher
return obj[index]
IndexError: string index out of rangeraise语句不包括异常名称或额外资料时,会重新引发当前异常。如果希望捕获处理一个异常,而又不希望
异常在程序代码中消失,可以通过raise重新引发该异常。
第五:except(name1, name2)
def catcher():
try:
fetcher(x, 4)
except(TypeError, IndexError):
print "got exception"
else:
print "not exception"捕获列表列出的异常,进行处理。若except后无任何参数,则捕获所有异常。
def catcher():
try:
fetcher(x, 4)
except:
print "got exception"
1992

被折叠的 条评论
为什么被折叠?



