gpt4 book ai didi

python - 具有不同包含路径的自定义 Python 异常

转载 作者:行者123 更新时间:2023-12-01 06:19:41 26 4
gpt4 key购买 nike

更新:正如我所说,这不是与 Python 相关的原则性问题,但似乎更具体。有关我的问题的更多解释,请参阅下文。

我有一个自定义异常(我们称之为 CustomException),它位于名为 exceptions.py 的文件中。现在想象一下,我可以通过两个路径导入此文件:

import application.exceptions

import some.application.exceptions

结果相同。此外,我无法控制模块在其他模块中导入的方式。

现在来展示我的问题:假设函数 do_something 来自另一个以我不知道的方式导入 exceptions.py 的模块。如果我这样做:

import application.exceptions
try:
do_something ()
except application.exceptions.CustomException:
catch_me ()

可能工作或不工作,取决于子模块如何导入exceptions.py(我不知道)。

问题:有没有办法解决这个问题,即无论包含路径如何,异常的名称都将始终被理解?如果不是,避免这些名称冲突的最佳做法是什么?

干杯,

更新

这是一个 Django 应用程序。 some 是 Django“项目”的名称,application 是一个 Django 应用程序的名称。我的带有 try.. except 子句的代码位于另一个应用程序 frontend 中,并作为文件 some/frontend/views.py 中的 View 存在。

PYTHONPATH 是干净的,也就是说,从我的项目中,路径中只有 /path/to/project 。在 frontend/views.py 中,我通过 import application.exceptions 导入 exceptions.py,这似乎有效。 (现在回想起来,我不太清楚为什么它有效......)

异常是在 exceptions.py 文件本身中引发的。

更新2

对于一些读者来说可能会感兴趣,我终于找到了导入出错的地方。

sys.path 没有显示任何可疑的异常情况。我的 Django 项目位于 /var/www/django/project 中。我已经安装了应用程序 app1app2,但在 settings.py 中将它们标记为

INSTALLED_APPS = [
'project.app1',
'project.app2',
]

额外的项目。是搞乱sys.modules的罪魁祸首。将设置重写为

INSTALLED_APPS = [
'app1',
'app2',
]

解决了问题。

最佳答案

为什么这会成为一个问题?异常(exception)情况是我会根据类类型进行匹配,并且无论它是导入的还是相同的,例如

import exceptions
l=[]
try:
l[1]
except exceptions.IndexError,e:
print e

try:
l[1]
except IndexError,e:
print e

两者都捕获相同的异常

您甚至可以将其分配给一个新名称,但通常不推荐

import os
os.myerror = exceptions.IndexError
try:
l[1]
except os.myerror,e:
print e

关于python - 具有不同包含路径的自定义 Python 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063228/

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