我有以下循环导入的案例(这里非常简化):
array2image.py
转换模块:
import tuti
@tuti.log_exec_time # can't do that, evaluated at definition time
def convert(arr):
'''Convert array to image.'''
return image.fromarray(arr)
tuti.py
测试工具模块:
import array2image
def log_exec_time(f):
'''A small decorator not using array2image'''
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')
它因 NameError 而失败。这对我来说看起来不对,因为那里确实没有循环依赖。我一直在寻找一种巧妙的方法来避免这种情况或解释......在写这个问题的中途我找到了它。
将import
下面的装饰器移到tuti.py
解决 NameError 中:
def log_exec_time(f):
'''A small decorator not using array2image'''
import array2image
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')