Python (pylint):捕获验证过程中的一般异常

问题描述 投票:0回答:1

传统观点认为,除非非常罕见的情况,否则你永远不会在 Python 中捕获一般异常。然而,对于什么是“非常罕见的情况”,明显缺乏建议。

我对函数通过在目标对象上调用各种函数来执行某种验证的用例感兴趣。如果这些函数引发错误,则该对象一定无效。

在我的特定情况下,我试图验证 .json 文件实际上是有效的 json。它看起来像这样:


def validate_json(file_path: str):

    try:
        with open(file_path) as f:
            json.load(f)
    except Exception:
        return False

    return True


def list_json_files(root_dir: str):
    return [file for file in glob.glob(root_dir + "*.json") if validate_json(file)]

请注意,我没有测试上面的代码(我快速编写它来说明场景)。在许多这样的情况下,似乎没有必要追踪在尝试验证特定对象时可能发生的所有可能的异常。捕获特定的异常也会使代码不太适合未来,例如,如果外部库要添加可能引发的新异常。

我对这个用例感到好奇的主要原因是因为它对我来说似乎并不那么罕见,但从未被提及。

更重要的是,作为 pylint 用户,我必须处理那些令人讨厌的广泛异常捕获警告,如果不用

#pylint: disable...
s 乱扔我的代码,我就无法摆脱这些警告。

我想我的问题是:这是捕获一般异常的正当理由吗?否则,解决此类问题的更好方法是什么,特别是以让 pylint 高兴的方式?

python validation exception pylint
1个回答
0
投票

你的例子可能比你想象的更有启发性!

确实,有时您想要捕获任何异常,而这些时候可能会让您咒骂 pylint 是一个过于挑剔的保姆。然而,这只是一种有用的唠叨,询问您是否“真的确定”您不想说得更具体。 但是在您的示例中,如果您拼错了文件名,或者没有读取该文件的权限怎么办?您现在相信您手上有无效的 JSON,而未捕获的 FileNotFoundError 或 PermissionError 会告诉您真正的问题是什么。

© www.soinside.com 2019 - 2024. All rights reserved.