这只是一个猜测,因为您没有给我们展示足够的代码,而您给我们展示的内容实际上并没有重现问题,但是……
如果您在exec
函数内部执行此操作,则locals()
和globals()
将有所不同。在这种情况下,代码将像在类定义中一样被执行。因此,就像您这样做:
class _:
from x import X
class Y(X): # does not crash here, ...
def __init__(self):
X.__init__(self) # ... but here
foo=Y()
del _
如果是您的问题,您可以通过致电exec(code, globals(), globals())
或来解决exec(code, locals(), locals())
。(当然,哪一个合适,取决于您实际上要尝试执行的操作,而您没有告诉我们。)