gpt4 book ai didi

python - Bare-Except 不受欢迎的任何原因

转载 作者:太空狗 更新时间:2023-10-30 02:03:38 26 4
gpt4 key购买 nike

以有限的方式,我想知道为什么在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com