第2章 异常处理

在前面的章节中,我们从一个简单的基于命令行的脚本开始,并逐渐将其转变为面向对象的代码。在这个过程中,我们增加了几个新的功能。到目前为止,我们很少关注代码的质量。我们没有积极查找程序运行过程中遇到的明显错误。这些应用程序运行时检测到的错误被称为异常。在本章中,你将会学习到通过异常处理让应用更加健壮的技术。

尤其是,我们将会覆盖以下话题:

  • 什么是Python中的异常?
  • 使用try...except语句控制程序流。
  • 通过异常处理来应付普通问题。
  • 创建并使用定制的异常类。

在版本1.0.0中加入的治疗功能成为核心用户最喜欢的一点。面向对象方法让你在增加新功能时处于一个更有利的地位(或许你是这样认为的)。随着更多需求的涌入,报告上来的漏洞也随之而来,如图2-1所示。

这个游戏不错,但是也有一些令人烦恼的事情。例如,当提示选择一个木屋时,有时我输入了一个大于5的数字或者不小心输入了一个字符,然后程序就打印出了一些奇怪的错误信息并且终止应用了。你可以修正这个问题吗?

..\17-1204排版图1\p46a.tif

图2-1

让我们重现报告上来的问题。运行第1章中的例子:

$ python ch01_ex03.py

如下所示,当提示输入木屋的编号时,请输入任意字符:

应用程序被控制台中跟踪到的错误所终止。异常栈跟踪异常(或者错误)发生时的调用栈快照。在这个特定的例子中,_process_user_choice方法被play方法调用,而play方法是在模块中直接被调用的。行号显示了这些调用发生的位置。这对调试是非常有用的。在这个程序中,用户反馈的错误是ValueError。这个错误发生的原因是我们假设用户的输入是整数。另外一个反馈的问题是,用户选择的木屋编号不在1到5的范围内。此时,接收到的 ...

Get Python应用开发指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.