首页 > 解决方案 > 我可以在 except 子句中抛出自定义异常而不会导致:“在处理...期间”

问题描述

因此,首先,如果您认为这不是最佳实践,我很乐意在评论中讨论。

我的问题如下,我尝试根据用户输入查找文件。如果找不到文件,我会得到一个FileNotFoundError. 这很好,但我想给出一个可以更好地描述问题的适当例外。用户并不真正知道存在的文件决定了某些事情是否可能。所以一个FileNotFoundError可能看起来不合适。所以我目前拥有的是:

try:
    x = get_file(...)
except FileNotFoundError as e:  # Unsupported version
    raise MyOwnException(f"Explaining the problem")

上面的工作,但异常看起来像这样:

我很想只有MyOwnException. 为此,我了解您可以执行以下操作:

try:
    x = get_file(...)
except FileNotFoundError as e:  # Unsupported version
    file_not_found = True
if file_not_found:
    raise MyOwnException(f"Explaining the problem")

我还可以使用 . 检查文件是否存在os.path.isfile(file_path)。但我希望有一个更优雅的解决方案,因为通常不鼓励在打开之前检查文件是否存在。

标签: pythonpython-3.xexceptiontry-except

解决方案


是的,您可以在没有前一个异常上下文的情况下使用以下方法引发异常:

raise MyOwnException("Explaining the problem") from None

请参阅https://docs.python.org/3/tutorial/errors.html#exception-chaining


推荐阅读