Python运行报TypeError: 'module' object is not callable求助
问题描述
运行Python程序时抛出TypeError: 'module' object is not callable类型错误,多次排查无法定位问题根源。
触发报错的原始代码
import numpy as np import tmm import matplotlib.pyplot as plt nlambda = 1000 wavelengths = np.linspace(400,800,nlambda) ns = np.linspace(1.48,1.48,nlambda) ts = 500 na = 1.0 nf = np.linspace(1.217,1.217,nlambda) thk = np.array([550/4/1.217]) q = 0.0*np.pi/180.0 sp= 'TM' back = 0 [T,R,t,r] = tmm (wavelengths,ns,ts,na,nf,thk,q,sp,back) back = 1 [T,Rb,t,r] = tmm(wavelengths,ns,ts,na,nf,thk,q,sp,back) np.savetxt('tmm_R_withwithout.data',np.transpose([wavelengths,R,Rb])) plt.plot(wavelengths,R,wavelengths,Rb) plt.xlabel('Wavelength') plt.ylabel('Reflection') plt.show()
报错原因
import tmm导入的是tmm整个模块对象,模块本身不支持直接加括号传参调用。代码中两处tmm(参数)的写法,是把模块当成了可执行函数调用,才会触发该类型错误。tmm库实际提供计算能力的是模块内部同名的tmm函数,不是模块本身。
修复方法
两种方案任选其一即可:
- 方案1:修改导入语句,直接导入目标函数
将import tmm替换为from tmm import tmm,后续调用代码无需改动。 - 方案2:保留原有导入语句,补全函数调用路径
将两处调用的tmm(参数)修改为tmm.tmm(参数),明确指定调用模块下的tmm函数。
修正后可正常运行的代码
import numpy as np from tmm import tmm import matplotlib.pyplot as plt nlambda = 1000 wavelengths = np.linspace(400,800,nlambda) ns = np.linspace(1.48,1.48,nlambda) ts = 500 na = 1.0 nf = np.linspace(1.217,1.217,nlambda) thk = np.array([550/4/1.217]) q = 0.0*np.pi/180.0 sp= 'TM' back = 0 [T,R,t,r] = tmm(wavelengths,ns,ts,na,nf,thk,q,sp,back) back = 1 [T,Rb,t,r] = tmm(wavelengths,ns,ts,na,nf,thk,q,sp,back) np.savetxt('tmm_R_withwithout.data',np.transpose([wavelengths,R,Rb])) plt.plot(wavelengths,R,wavelengths,Rb) plt.xlabel('Wavelength') plt.ylabel('Reflection') plt.show()
内容的提问来源于stack exchange,提问作者Prateek Gupta
相关产品推荐
相关产品推荐

