使用Python try/except 捕获和处理异常提高你的编程能力

使用Python try/except 捕获和处理异常提高你的编程能力

Python 的 try/except 语句是专为异常捕获而设计的。这是 Python 中级概念,也是一个非常有用的概念。所以如果你想知道如何用 Python 捕捉和处理异常,你需要了解 Python try/except 语句。

本文中我将向你展示如何使用 Python try/except 语句来捕获异常和创建自己的异常类,以及何时使用它,另外还有其他的异常处理替代方案。

什么是异常?

异常是在程序执行期间出现的“问题”,这是一个信号,表明发生了意想不到的事情。当程序遇到异常时,它会向解释器发送一个错误。

而由于 Python 是一种解释型语言而不是编译型语言,因此这些错误可能要等到编写代码之后甚至程序运行时才会被发现。常见的 Python 异常包括:

  • ZeroDivisionError:当你尝试除以零时会出现 ZeroDivisionError 异常。如果你不验证数据,这是一个很容易犯的错误。虽然某些语言可能只返回”0″,但 Python 会返回异常,因为它不想继续进行可能不正确的计算。
  • ValueError:当函数收到与预期不同类型的值时,Python会抛出ValueError异常。
  • KeyboardInterrupt:当用户在程序运行期间按下中断键时,就会发生 KeyboardInterrupt。这种类型的异常实际上是非常有价值的,这是 GUI 编程和交互性的一部分。
  • SyntaxError:语法错误总是会发生。当某些内容没有正确输入时,它就会变成语法错误。
  • FileNotFoundError:你尝试打开文件,但未找到。这将导致 FileNotFoundError。

这些异常是严重异常,即程序在出现此类错误后无法继续运行。因为如果程序在这个错误之后继续运行,往往会出现更多难以预料的错误。

一个简单的例子是从文件中读取内容。如果未找到该文件还继续运行代码的话,那么其余代码可能会不断引用不存在的文件,这只会产生更多的错误。

为了避免不可预料的异常导致程序运行中断,我们需要在代码中对可能出现异常的地方做提前处理,这就是 Python try 的用武之地。

错误与异常

错误和异常有什么区别?虽然还有其他定义,但在你编写代码时通常会发生错误。异常是代码运行时发生的事情。Python 作为一种解释性语言意味着错误和异常之间的界限可能会变得模糊。

例如,在 Java 中,当你去编译你的代码时会发生错误——当用户去运行代码时会发生异常。了解更多有关基本的Python信息可以帮助你了解编译语言和解释语言之间的区别。

使用try/except 捕获异常

Python try 语句会尝试执行指定的代码块,如果不成功,except 语句会抛出异常。对于异常的处理,你可以自己指定。

这是 Python try/except 的语法:

try:
    <do something>
except exception:
    <exception>

在上面的语法中:

  • <do something> 是你要完成的代码块。
  • <exception> 是代码块无法完成时发生的情况。

这与 JavaScript 中的相同概念非常相似,只有语法不同。此外,还有 else 和 finally 值,请看以下的示例。来看一个例子,我们要打开一个文件:

try:
    open("file.doc")
except:
    print("无法打开该文档。")
else:
    print("文档已打开。")
finally:
    print("下一步?")

让我们分解这些代码行:

try:
    open("file.doc")

这是我们尝试运行的代码块,我们希望打开一个指定的文档。

except:
    print('我们无法打开该文档')

此 except 操作仅在我们无法打开文档时发生,但是他会在无法打开文档的任何请看下执行。例如文档不存在,或者文档已损坏,或者其他可能出现的未知情况。

如果你想更加精确,只想在文档没不存在的情况下执行该操作,你可以这样做:

# 捕获文件不存在错误
except FileNotFoundError:
    print('找不到这个文件')
# 捕获其他未知错误
except:
    print('文件已找到,但是Python无法打开文档,请检查')

一般来说,尽可能指定具体的错误是好的,但对于其他的未知错误,你可以再用一个 except 语句来进行兜底。

else:
    print("文档已打开")

此 else 块仅在未发生异常时运行。也就是说,仅当文件成功打开时才执行该语句。

finally:
    print("下一步?")

注意,finally 关键字将始终执行,无论是否有异常。因此,finally 关键字指的是总是会发生的事情

创建自己的异常

我们查看了一些最常见的内置 Python 异常。但还要注意,你也可以创建 Python 异常。

通过使用 Python 创建自定义异常,你可以实现更多的自定义功能。你可以通过继承 exception类 创建自定义异常:

class Customexception(Exception)
    print("用户信息不完整")

现在,如果要使用,你可以手动抛出异常:

raise(Customexception)

使用自定义异常是一种很好的做法。自定义异常是一个比较高级的概念,它要求你深入了解编程背后的逻辑以及可能出现的问题。

什么时候应该使用 try/except?

因此,你知道 try/except 旨在捕获异常。那么我们在什么情况下,应该使用 try/except 来捕获异常呢?

答案是:如果你不确定要运行的代码的有效性,则应始终使用 try/except。

例如,你的程序需要到用户输入的数字进行运算,那么你需要知道它是否可能是零。否则,当用户输入的除数恰好是零,你的程序就会出现异常,并停止运行。

需要注意的是,try/except 和异常处理通常在 Python 程序中比在其他语言中更常见。在许多其他语言中,程序员不会对异常处理进行如此多的控制。因

为Python是解释性语言,它没有编译的过程让你发现和改正错误,所以你需要在代码中做更多细致的工作,来尽可能应对异常的情况的发生。

使用 if/esle 代替 try/except 的情况

try/except 更多时候会用在不可控制的错误上,当程序运行运行过程中,遇到一些不可预知的问题而做的处理。对于一些常见的很容易控制的错误,我们可以用 if/else 语句来代替。

例如,上文中提到的 零除 错误,你可以使用 try/cxcept 语句来处理:

a = 0
b = 1
try:
    print(b/a)
except ZeroDivisionError:
    print("尝试除以零!")

因为这里的零除错误是比较容易预知的,所以,你可以使用 if/lese 语句来提前处理:

a = 0
b = 1
if a == 0:
    print("试图除以零!")
else:
    print(b/a)

对于大多数程序员来说,在开始之前测试所有潜在的失败点是一个好习惯。当然如果你需要对捕获到的异常做更多的处理,显然 try/except 语句会更加合适。

有关 Python 异常捕获的更多信息

编程重在实践,当你遇到的问题多了,你自然就会熟悉这些语句的用法。要获得更多 Python 练习,请考虑参加一些Python 课程或专注于 一些Python实战项目

你也可以通过查找其他类型的异常及其工作方式来了解有关 try/except 函数的更多信息。你还可以阅读一些常见的 Python 面试问题,以更好地了解该语言最重要的内容。

如果本站的内容对你有帮助,可以点击这儿,不花一分钱捐赠本站

(0)
疯狂的小黑的头像疯狂的小黑
上一篇 2022年7月15日 上午11:20
下一篇 2022年7月18日 下午11:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

微信