例:
try:
print('try...')
r=10/0
print('result:',r)
except ZeroDivisionError as e:
print('except:',e)
finally:
print('finally...')
print('END')
运行结果:
try…
except: division by zero
finally…
END
当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。
(上面代码在计算10/0时会产生一个除法运算错误)
从输出可以看到,当错误发生时,后续语句print(‘result:’,r)不会被执行,except由于捕获到ZeroDivisionError,因此被执行。最后,finally语句被执行。然后,程序继续按照流程往下走。
如果把0改成2,则执行结果如下:
try…
result: 5.0
finally…
END
你还可以猜测,错误应该有很多种类,如果发生了不同类型的错误,应该由不同的except语句块处理。没错,可以有多个except来捕获不同类型的错误:
try:
print('try...')
r=10/int('a')
print('result:',r)
except ValueError as e:
print('ValueError:',e)
except ZeroDivisionError as e:
print('except:',e)
finally:
print('finally...')
print('END')
运行结果:
try…
ValueError: invalid literal for int() with base 10: ‘a’
finally…
END
此外,如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句:
try:
print('try...')
r=10/int('2')
print('result:',r)
except ValueError as e:
print('ValueError:',e)
except ZeroDivisionError as e:
print('except:',e)
else:
print('no error')
finally:
print('finally...')
print('END')
运行结果:
try…
result: 5.0
no error
finally…
END
如果要比较爽地设置断点、单步执行,就需要一个支持调试功能得IDE(集成开发环境)。目前比较好的Python IDE有PyCharm。
写程序最痛苦的事情莫过于调试,程序往往会以你意想不到的流程来运行,你期待执行的语句其实根本没有执行,这时候,就需要调试了。
虽然用IDE调试起来比较方便,但是最后你会发现,logging才是终极武器。