gpt4 book ai didi

python - Django:只有在 try except block 中导入才会导致 ImportError

转载 作者:行者123 更新时间:2023-12-05 07:04:44 25 4
gpt4 key购买 nike

我有两个模块相互导入一些东西:

project/urls.py:

from modules.helpers import helper

urlpatterns = [
# patterns
]

modules/helpers.py:

def helper():
# some magic

def main():
from project.urls import urlpatterns
# process urlpatterns

modules/__init__.py:

from modules.helpers import main
main()

一切正常,直到我将 from project.urls import urlpatterns 包装成如下所示:

def main():
try:
from project.urls import urlpatterns
except Exception as e:
print(str(e))

它打印:

cannot import name 'urlpatterns' from partially initialized module 'urls' (most likely due to a circular import) (/Users/MaxCore/Documents/www/project/project/urls.py)

可能是什么原因?

编辑

在最小的可重现示例中,一切正常,可能异常与 django 有某种关系。由于 try except block ,导入顺序发生了一些变化


如果我在 settings.INSTALLED_APPS 中指定 modules(这不是必需的),并且 runserver 它会打印:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

最佳答案

我仍然不明白 try-except block 改变加载顺序背后的深层原因,但我找到了解决方案:

  1. 模块添加到settings.INSTALLED_APPS
  2. modules/ 目录中创建 apps.py,内容为:
from django.apps import AppConfig

class ModulesConfig(AppConfig):
name = 'modules'

def ready(self):
from module.helpers import main
main()
  1. default_app_config = 'core.apps.ModulesConfig' 添加到 modules/__init__.py

关于python - Django:只有在 try except block 中导入才会导致 ImportError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62879920/

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