在一种有限的方式中,我想知道为什么在Python中使用裸露的东西是如此不受欢迎.
如果我有一个完整的程序运行,我会这样做:
import sys
from application import program
try:
program.start()
except:
print >> sys.stderr, "It didn't work"
Run Code Online (Sandbox Code Playgroud)
我正在压制重要信息并且没有真正的输出.但是让我们考虑我正在为配置设置进行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)
Run Code Online (Sandbox Code Playgroud)
我想在这种情况下,构建一个捕获操作的自定义异常是否更好,以便为阅读代码的人提供更多信息?
小智 8
你的例子是一个很好的例子,说明为什么这是一个坏主意.您的程序不是"如果数据不存在或已损坏,则使用模板覆盖它".您的程序是"如果出现任何问题,请尝试使用模板覆盖数据".
例如,如果您在尝试加载数据时执行的代码中存在拼写错误,则程序将不会通知您,而是使用模板覆盖所有(有效!)数据.这可能是一个相当灾难性的错误,无论是在数据丢失方面,还是你可以轻易地说服自己这可能不是问题,如果错误发生在你的测试用例错过的不经常运行的代码路径中.
出现问题的另一个例子是用户是否决定尝试用Ctrl+ 中止程序C.你会抓住KeyboardInterrupt并迅速破坏他的所有数据.