python - 我可以在 except 子句中抛出自定义异常而不会导致:“在处理...期间”
问题描述
因此,首先,如果您认为这不是最佳实践,我很乐意在评论中讨论。
我的问题如下,我尝试根据用户输入查找文件。如果找不到文件,我会得到一个FileNotFoundError
. 这很好,但我想给出一个可以更好地描述问题的适当例外。用户并不真正知道存在的文件决定了某些事情是否可能。所以一个FileNotFoundError
可能看起来不合适。所以我目前拥有的是:
try:
x = get_file(...)
except FileNotFoundError as e: # Unsupported version
raise MyOwnException(f"Explaining the problem")
上面的工作,但异常看起来像这样:
FileNotFoundError
& 堆栈跟踪- “在处理上述异常的过程中,又出现了一个异常:”
MyOwnException
& 堆栈跟踪
我很想只有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)
。但我希望有一个更优雅的解决方案,因为通常不鼓励在打开之前检查文件是否存在。
解决方案
是的,您可以在没有前一个异常上下文的情况下使用以下方法引发异常:
raise MyOwnException("Explaining the problem") from None
请参阅https://docs.python.org/3/tutorial/errors.html#exception-chaining
推荐阅读
- python - 我将如何在 python 3.6 中解析这个 ret
- javascript - 将 JavaScript 数组转换为 formData
- exception - AVIOContext 读取回调中的异常处理
- javascript - 在 JavaScript 中按数组属性分组
- rest - 授权 REST 资源访问
- php - 如何将 php 文件相互交错并检查参数的 URL?
- c++ - C++ 客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- mongodb - 仅将更改的值从表单提交更新到 MongoDB
- azure - Azure Devops 项目——它们来自哪里?如何去除?
- methods - V-for循环方法不直接导致渲染