我想"attempted relative import beyond top-level package"
通过在导入中包含异常处理来缩小常见错误的范围。
在我的 Django 测试中,DjangoProject/tests.py
我编写了相对于自身 ( tests.py
) 的导入。执行每个测试文件的默认值unittests.py
位于根文件夹中,该文件夹还包括 DjangoProject 文件夹。
attempted relative import beyond top-level package
当我将它添加
到我的单元测试时,我得到了错误DjangoProject/tests.py
,很明显它来自进口。使用 try/except 我可以写出一个更清晰的错误,所以我不需要猜测为什么以及哪个文件导致了错误。
现在我的代码如下所示:
try:
from django.utils.safestring import mark_safe
import json
from django.conf import settings
from viewsfunctions import *
from .. import PoM
import unittest
except Exception as importex:
print("Error in the tests.py-imports: "+str(importex))
它首先抛出了所有信息:
"No module named 'viewsfunctions'"
这很有意义并且很有帮助,就像viewsfunctions
里面的模块一样DjangoProject
。我将这一行替换为:from DjangoProject.viewsfunctions import *
下一个错误是:
Error in the Imports: attempted relative import beyond top-level package
这正是我的问题。这可以是任何东西。通过 pdbing,我可以将其追踪到from .. import PoM
(因为模块PoM
相对于tests.py
顶层文件夹,但相对于unittests.py
同一文件夹中的执行)
在这种只有少量导入的情况下,缩小范围相对较快,但是有没有办法编写更好的异常消息或以某种方式传递更多信息,错误实际发生在哪些导入行中?