我正在尝试从另一个级别的模块中导入一些类。我可以输入所有类,但我试图动态地输入
如果我做:
from ..previous_level.module import *
raise: SyntaxError: import * only allowed at module level
Run Code Online (Sandbox Code Playgroud)
来自 myapp 文件夹的相同内容:
from myapp.previous_level.module import *
raise: SyntaxError: import * only allowed at module level
Run Code Online (Sandbox Code Playgroud)
所以我认为:
my_classes = ['Class_Foo', 'Class_Bar']
for i in my_classes:
from ..previous_level.module import i
raise: ImportError: cannot import name 'i'
Run Code Online (Sandbox Code Playgroud)
并且:
my_classes = ['Class_Foo', 'Class_Bar']
for i in my_classes:
__import__('myapp').previous_level.module.y
raise: AttributeError: module 'myapp.previous_level.module' has no attribute 'y'
Run Code Online (Sandbox Code Playgroud)
我试过string format
,getattr()
,__getattr__
但没有成功。
以这种方式导入是不可能的,或者我做错了什么?
SyntaxError: import * only allowed at module level
如果您尝试*
从函数内部导入,则会发生错误。从问题中看不到这一点,但原始代码似乎类似于:
def func():
from ..previous_level.module import * # SyntaxError
Run Code Online (Sandbox Code Playgroud)
另一方面,在模块开头导入是有效的:
from ..previous_level.module import * # OK
Run Code Online (Sandbox Code Playgroud)
也就是说,我仍然建议使用绝对导入而不使用*
:
from myapp.previous_level.module import ClassA, ClassB, ClassC
x = ClassA()
# or:
import myapp.previous_level.module
x = myapp.previous_level.module.ClassA()
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是完全错误的:
for i in my_classes:
from ..previous_level.module import i
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9740 次 |
最近记录: |