- 内容提要
- 作者简介
- 技术评审者简介
- 致谢
- 译者序 会编程的人不一样
- 前言
- 本书的读者对象
- 编码规范
- 什么是编程
- 本书简介
- 下载和安装 Python
- 启动 IDLE
- 如何寻求帮助
- 聪明地提出编程问题
- 小结
- 第一部分 Python 编程基础
- 第1章 Python 基础
- 第2章 控制流
- 第3章 函数
- 第4章 列表
- 第5章 字典和结构化数据
- 第6章 字符串操作
- 第二部分 自动化任务
- 第7章 模式匹配与正则表达式
- 第8章 读写文件
- 第9章 组织文件
- 第10章 调试
- 第11章 从 Web 抓取信息
- 第12章 处理 Excel 电子表格
- 第13章 处理 PDF 和 Word 文档
- 第14章 处理 CSV 文件和 JSON 数据
- 第15章 保持时间、计划任务和启动程序
- 第16章 发送电子邮件和短信
- 第17章 操作图像
- 第18章 用 GUI 自动化控制键盘和鼠标
- 附录A 安装第三方模块
- 附录B 运行程序
- 附录C 习题答案
10.1 抛出异常
当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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论