以一种有限的方式,我想知道为什么在 Python 中使用裸机除外如此不受欢迎。

如果我有一个完整的程序正在运行,我就会明白这一点,我会这样做:

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's 不受欢迎的任何原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30294977/

10-12 22:48