为何sys.modules显示json已加载,直接调用却报NameError?
问题解答:sys.modules存在'json'但直接调用json报错的原因
sys.modules是模块缓存,而非当前命名空间的引用集合:sys.modules记录的是整个Python进程中已加载的模块——可能是你自己导入的,也可能是其他系统模块、已加载的第三方库间接导入的。它的作用是避免重复加载模块以提升性能,但和你当前代码的命名空间没有直接关联。
当前命名空间缺少json的引用:当你直接调用
json.dumps({'oren':12})时,Python只会在当前的局部/全局命名空间里查找json这个名称。因为你自己没有执行import json,这个名称并不存在于你的代码命名空间中,所以必然触发NameError。直观类比:假设你导入了
pandas,而pandas内部依赖并导入了numpy,此时sys.modules里会有'numpy',但你自己的代码如果没写import numpy,直接用numpy.array()照样会报错,逻辑完全一致。解决方法:想要在代码里使用json模块的功能,必须显式执行
import json,将json模块的引用导入到当前命名空间,之后才能正常调用json.dumps()这类方法。
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

