作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
以有限的方式,我想知道为什么在 Python 中使用 bare-except 如此不受欢迎。
如果我有一个完整的程序正在运行并且我做了类似的事情,我就会明白这一点:
import sys
from application import program
try:
program.start()
except:
print >> sys.stderr, "It didn't work"
我隐藏了重要信息,没有得到任何实际输出。但是让我们考虑一下我正在为配置设置执行 IO 操作,并且如果配置不存在或损坏,我有一个模板数据集可以使用:
import os
from config import load_data
from template import save_data
dir = os.path.expanduser('~')
path = os.path.join(dir, 'config.txt')
try:
load_data(path)
except:
save_data(path)
我想在这种情况下,构建一个捕获操作的自定义异常是否更好,以便它为阅读代码的人提供更多信息?
最佳答案
你的例子是一个极好的例子,说明了为什么这是个坏主意。您的程序不是“如果数据不存在或损坏,则用模板覆盖它”。您的程序是“如果出现任何问题,请尝试使用模板覆盖数据”。
例如,如果您在尝试加载数据时执行的代码中有拼写错误,您的程序将不会通知您,而是用模板覆盖所有(有效!)数据。这可能是一个相当灾难性的错误,无论是在数据丢失方面,还是在您的测试用例遗漏的不常运行的代码路径中出现拼写错误时,您如何轻松地说服自己这不可能是问题。
另一个出错的例子是,如果用户决定尝试使用 Ctrl+C 中止程序。您会捕捉到 KeyboardInterrupt
并立即破坏他的所有数据。
关于python - Bare-Except 不受欢迎的任何原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30294977/
我是一名优秀的程序员,十分优秀!