Python工程师之Python编程:从入门到实践【3.2】

10.3.8 静默失败

在前一个示例中,我们告诉用户有一个文件找不到。但并非每次捕获到异常都需要
告诉用户,有时候你希望程序在发生异常时保持静默,就像什么都没有发生一样继
续运行。要让程序静默失败,可像通常那样编写try 代码块,但在except 代码块
中明确地告诉Python什么都不要做。Python有一个pass 语句,可用于让Python在
代码块中什么都不要做:
def count_words(filename):
"""计算一个文件大致包含多少个单词。"""
try:
--snip--
except FileNotFoundError:
❶ pass
else:
--snip--
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt',
'little_women.txt']
for filename in filenames:
count_words(filename)
相比于前一个程序,这个程序唯一的不同之处是❶处的pass 语句。现在,出现
FileNotFoundError 异常时,将执行except 代码块中的代码,但什么都不会发
生。这种错误发生时,不会出现traceback,也没有任何输出。用户将看到存在的每
个文件包含多少个单词,但没有任何迹象表明有一个文件未找到:
The file alice.txt has about 29465 words.
The file moby_dick.txt has about 215830 words.
The file little_women.txt has about 189079 words.
pass 语句还充当了占位符,提醒你在程序的某个地方什么都没有做,并且以后也
许要在这里做些什么。例如,在这个程序中,我们可能决定将找不到的文件的名称
写入文件missing_files.txt中。用户看不到这个文件,但我们可以读取它,进而处
理所有找不到文件的问题。

10.3.9 决定报告哪些错误

该在什么情况下向用户报告错误?又该在什么情况下静默失败呢?如果用户知道要
分析哪些文件,他们可能希望在有文件却没有分析时出现一条消息来告知原因。如
果用户只想看到结果,并不知道要分析哪些文件,可能就无须在有些文件不存在时
告知他们。向用户显示他不想看到的信息可能会降低程序的可用性。Python的错误
处理结构让你能够细致地控制与用户分享错误信息的程度,要分享多少信息由你决
定。
编写得很好且经过详尽测试的代码不容易出现内部错误,如语法或逻辑错误,但只
要程序依赖于外部因素,如用户输入、存在指定的文件、有网络链接,就有可能出
现异常。凭借经验可判断该在程序的什么地方包含异常处理块,以及出现错误时该
向用户提供多少相关的信息。
动手试一试
练习10-6:加法运算  提示用户提供数值输入时,常出现的一个问题是,用户
提供的是文本而不是数。在此情况下,当你尝试将输入转换为整数时,将引发
ValueError 异常。编写一个程序,提示用户输入两个数,再将其相加并打印
结果。在用户输入的任何一个值不是数时都捕获ValueError 异常,并打印一
条友好的错误消息。对你编写的程序进行测试:先输入两个数,再输入一些文
本而不是数。
练习10-7:加法计算器  将为完成练习10-6而编写的代码放在一个while 循
环中,让用户犯错(输入的是文本而不是数)后能够继续输入数。
练习10-8:猫和狗  创建文件cats.txt和dogs.txt,在第一个文件中至少存储
三只猫的名字,在第二个文件中至少存储三条狗的名字。编写一个程序,尝试
读取这些文件,并将其内容打印到屏幕上。将这些代码放在一个try-except
代码块中,以便在文件不存在时捕获FileNotFound 错误,并显示一条友好的
消息。将任意一个文件移到

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值