Python尝试声明:介绍
这是一个规划的生活:错误发生。我们不是指您将作为开发程序的一部分捕获和修复的错误。我们在这里谈论在现实世界中的计划出现时会发生意外问题。有人进入将分为零的数据。您的程序需要文件,但它已从硬盘驱动器中删除。那些讨厌的用户!如果不是他们,程序将完全运行。
不担心,帮助是。Python Try语句提供了一种方法来捕获这些问题并允许程序正常进行。在Python编程开始随着初学者的这个课程。如果您已经知道另一种编程语言,请尝试此课程以获得更有经验的程序员。
首先,让我们明确我们在这里治愈的东西。在Python中,例外是可以定义的较小问题,并且可能具有解决方案。程序可以处理和恢复异常。错误是更大的尺度问题,这是如此灾难性,即最好中止该程序。Python Try语句旨在处理异常。例外的一些例子是:
被零除
尝试使用字符串变量进行算术
调用一种不存在的方法
打开不存在的文件
在系统标记它只读时打开文件以写入
按下停止执行的键盘组合
例外构成了两个问题。首先是程序无法按预期运行的明显问题。另一个问题是用户必须意识到某些事情是错误的。Python在异常上生成的默认消息是隐秘的,可能不会出现足以让用户的注意力出现。如果用户被告知该文件是只读的,则它们可能能够修复该文件,并且可以将程序成功重新运行。
简单的例子:划分零
Python允许您使用除块语句中的块语句处理异常。可能会生成异常的代码将在此块中放置。这是一个例子:
询问用户A和B值的代码
读取响应并将它们分配给变量A和B的代码
尝试:
c = a / b
除了ZerodivisionError之外:
打印“你试图划分零”
在这种情况下,我们预计某人可能会为B零一个零并导致错误。该陈述被放入块的尝试部分。在这种情况下,除非关键字是为我们预期的特定错误定义,并打印了消息。仅在发生异常时运行。该程序以允许用户知道出错的方式优雅地停止,因此他们可以纠正它。通过将其放入GUI消息框中,您可以更明显地使消息更加明显。您可以参加Python Guis的课程以了解更多信息。
可是等等。愚蠢的用户可能已经放入字母或特殊字符而不是A或B的数字。这不会触发我们写的除外子句。我们需要另一个除句子来处理这个问题:
询问用户A和B值的代码
读取响应并将它们分配给变量A和B的代码
尝试:
c = a / b
除了ZerodivisionError之外:
打印“你试图划分零”
除了TypeError:
打印“您输入的一个项目不是数字”
除了:
打印“您输入的值存在未知问题”
请注意,除了声明之外还包括“裸体”。这将被我们未覆盖的任何其他异常触发。
现在假设我们想让用户知道A和B的输入是好的,没有出现例外抛出。我们可以用evers子句来做。只有在没有遇到异常时,才会执行else子句:
询问用户A和B值的代码
读取响应并将它们分配给变量A和B的代码
尝试:
c = a / b
除了ZerodivisionError之外:
打印“你试图划分零”
除了TypeError:
打印“您输入的项目之一不是数字
除了:
打印“您输入的值存在未知问题”
别的:
打印“输入很好”
除了除法中,允许您指定要由相同代码处理多个错误的形式。它将被列出的任何错误触发:
除了(ER1,ER2):
处理这些例外的代码
更美好的例子:把它整合在一起
现在让我们继续更现实的例子。假设我们正在打开文件,也许是数据库,并将数据写入它。有一些可能发生的例外情况。假设在打开文件后发生此类异常。我们的尝试除块可以处理这种情况。有关在Python中的文件工作的更多信息,请参阅本文。
尝试:
打开文件的代码
处理数据并写入文件的代码
关闭文件的代码
除了:
处理所有例外的代码
这里有一个问题。如果在文件关闭之前存在异常,则执行程序的执行跳转到除子之后,执行代码,然后继续。文件永远不会关闭。无论发生什么,我们都需要一种保证文件已关闭的方法。这是用终于子句完成的:
尝试:
打开文件的代码
处理数据并写入文件的代码
除了:
处理所有例外的代码
最后:
关闭文件的代码
我们将关闭文件的代码移动到最终子句。本节中的代码运行是否存在异常。
由于Python 2.5版,所有这些条款都可以放入一个块。假设在我们的数据中发生异常,并且不应该写入文件。我们可以包含写数据的else子句。如果没有异常,则else子句只会执行。
尝试:
打开文件的代码
处理数据的代码
除了:
处理所有例外的代码
别的:
代码将数据写入文件
最后:
关闭文件的代码
这应该为您提供如何使用Python Try语句的良好启动。正如您可以想象的那样,可以使用更多的高级方式。现在通过Python中的中间课程转到下一个级别。