#constants.py
TAU = 5.55555
ref_X = 95.047
ref_Y = 100.000
ref_Z = 108.883
def main():
DTEP = {}
DTEP['1'] = 1.22222
现在,如果我像这样导入TAU:
from constants import TAU
没有错误,但如果我通过相同的方法导入DTEP,则显示此错误:
ImportError: cannot import name DTEP
现在为什么会出现这个错误?它应该能够导入所有常量或不导入。为什么DTEP的这种偏袒?
添加完整代码(此处名称为DTEP1,我知道):
TAU = 5.55555
import shelve
ref_X = 95.047
ref_Y = 100.000
ref_Z = 108.883
DTEP1 = {}
def main():
d = shelve.open("tables/DTEP_132758.txt")
for k in xrange(0,132758):
DTEP1[str(k)] = rgb_to_cielab(d[str(k)][0], d[str(k)][1], d[str(k)][2])
print DTEP1['1223']
def rgb_to_xyz(R, G, B):
'''
Convert from RGB to XYZ.
'''
var_R = ( R / 255.)
var_G = ( G / 255.)
var_B = ( B / 255.)
if var_R > 0.04045:
var_R = ( ( var_R + 0.055 ) / 1.055 ) ** 2.4
else:
var_R /= 12.92
if var_G > 0.04045:
var_G = ( ( var_G + 0.055 ) / 1.055 ) ** 2.4
else:
var_G /= 12.92
if var_B > 0.04045:
var_B = ( ( var_B + 0.055 ) / 1.055 ) ** 2.4
else:
var_B /= 12.92
var_R *= 100
var_G *= 100
var_B *= 100
#Observer. = 2 deg, Illuminant = D65
X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505
return X,Y,Z
#-------------------------------------------------#
def xyz_to_cielab(X, Y, Z):
'''
Convert from XYZ to CIE-L*a*b*
'''
var_X = X / ref_X
var_Y = Y / ref_Y
var_Z = Z / ref_Z
if var_X > 0.008856:
var_X **= ( 1./3. )
else:
var_X = ( 7.787 * var_X ) + ( 16. / 116. )
if var_Y > 0.008856:
var_Y **= ( 1./3. )
else:
var_Y = ( 7.787 * var_Y ) + ( 16. / 116. )
if var_Z > 0.008856:
var_Z **= ( 1./3. )
else:
var_Z = ( 7.787 * var_Z ) + ( 16. / 116. )
CIE_L = ( 116 * var_Y ) - 16.
CIE_a = 500. * ( var_X - var_Y )
CIE_b = 200. * ( var_Y - var_Z )
return CIE_L, CIE_a, CIE_b
#-------------------------------------------------#
def rgb_to_cielab(R, G, B):
'''
Convert from RGB to CIE-L*a*b*.
'''
X,Y,Z = rgb_to_xyz(R,G,B)
return xyz_to_cielab(X,Y,Z)
if __name__ == "__main__":
main()
答案 0 :(得分:4)
DTEP
属于main
函数的范围。只能导入模块级别定义的变量(如TAU
和ref_X
)。
在这种情况下,只需将DTEP
的原始定义(但不一定是填充它的行)移出main
函数,就可以解决问题:
DTEP = {}
def main():
DTEP['1'] = 1.22222
main()
或者,您可以在global
函数中使用main
关键字(但请注意,只有在某个时候从模块级别调用main()
时才有效):
def main():
global DTEP
DTEP = {}
DTEP['1'] = 1.22222
main()
也许最好的解决办法就是让一切都处于同一水平,摆脱main
功能:
TAU = 5.55555
ref_X = 95.047
ref_Y = 100.000
ref_Z = 108.883
DTEP = {}
DTEP['1'] = 1.22222