返回介绍

10.1 抛出异常

发布于 2024-01-22 21:44:06 字数 2130 浏览 0 评论 0 收藏 0

当Python试图执行无效代码时,就会抛出异常。在第 3 章中,你已看到如何使用try和except语句来处理Python的异常,这样程序就可以从你预期的异常中恢复。但你也可以在代码中抛出自己的异常。抛出异常相当于是说:“停止运行这个函数中的代码,将程序执行转到except语句”。

抛出异常使用raise语句。在代码中,raise语句包含以下部分:

· raise关键字;

· 对Exception函数的调用;

· 传递给Exception函数的字符串,包含有用的出错信息。

例如,在交互式环境中输入以下代码:

>>> raise Exception('This is the error message.')
Traceback (most recent call last):
   File "", line 1, in 
     raise Exception('This is the error message.')
Exception: This is the error message.

如果没有try和except语句覆盖抛出异常的raise语句,该程序就会崩溃,并显示异常的出错信息。

通常是调用该函数的代码知道如何处理异常,而不是该函数本身。所以你常常会看到raise语句在一个函数中,try和except语句在调用该函数的代码中。例如,打开一个新的文件编辑器窗口,输入以下代码,并保存为boxPrint.py:

 def boxPrint(symbol, width, height):
      if len(symbol) != 1:
❶           raise Exception('Symbol must be a single character string.')
      if width <= 2:
❷           raise Exception('Width must be greater than 2.')
      if height <= 2:
❸           raise Exception('Height must be greater than 2.')
      print(symbol * width)
      for i in range(height - 2):
           print(symbol + (' ' * (width - 2)) + symbol)
      print(symbol * width)

 for sym, w, h in (('*', 4, 4), ('O', 20, 5), ('x', 1, 3), ('ZZ', 3, 3)):
      try:
           boxPrint(sym, w, h)
❹       except Exception as err:
❺            print('An exception happened: ' + str(err))

这里我们定义了一个boxPrint() 函数,它接受一个字符、一个宽度和一个高度。它按照指定的宽度和高度,用该字符创建了一个小盒子的图像。这个盒子被打印到屏幕上。

假定我们希望该字符是一个字符,宽度和高度要大于2。我们添加了if语句,如果这些条件没有满足,就抛出异常。稍后,当我们用不同的参数调用boxPrint()时,try/except语句就会处理无效的参数。

这个程序使用了except语句的except Exception as err形式❹。如果boxPrint()返回一个Exception对象❶❷❸,这条语句就会将它保存在名为err的变量中。Exception对象可以传递给str(),将它转换为一个字符串,得到用户友好的出错信息❺。运行boxPrint.py,输出看起来像这样:

****
*   *
*   *
****
OOOOOOOOOOOOOOOOOOOO
O                   O
O                   O
O                   O
OOOOOOOOOOOOOOOOOOOO
An exception happened: Width must be greater than 2.
An exception happened: Symbol must be a single character string.

使用try和except语句,你可以更优雅地处理错误,而不是让整个程序崩溃。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文