【发布时间】:2020-04-04 14:15:33
【问题描述】:
我想通过在导入中包含异常处理来缩小常见错误"attempted relative import beyond top-level package"。
在DjangoProject/tests.py 的 Django 测试中,我编写了相对于自身 (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)
在这种只有少量导入的情况下,缩小范围相对较快,但有没有办法编写更好的异常消息或以某种方式传递更多信息,错误实际发生在哪些导入行中?
【问题讨论】:
-
你使用什么命令行来运行测试?
标签: python exception python-import python-3.7 relative-import