Python导入的模块是None

我有一个导入正常的模块(我将它打印在使用它的模块的顶部)

from authorize import cim
print cim

哪个产生:

但是后来在方法调用中,它神秘地转向了None

class MyClass(object):
    def download(self):
        print cim

运行时显示cim为None.在此模块中,模块不会直接分配给None.

任何想法如何发生这种情况?

最佳答案
当你自己评论时 – 很可能有些代码将None归因于模块本身的“cim”名称 – 检查这个的方法是你的大模块是否只为其他模块“只读” – 我认为Python允许这个 –

(20分钟黑客攻击) –

这里 – 只需将此代码段放在“protect_module.py”文件中,导入并调用即可
名称“cim”消失的模块末尾的“ProtectdedModule()” –
它应该给你罪魁祸首:

"""
Protects a Module against naive monkey patching  -
may be usefull for debugging large projects where global
variables change without notice.

Just call the "ProtectedModule"  class,with no parameters from the end of 
the module definition you want to protect,and subsequent assignments to it
should fail.

"""

from types import ModuleType
from inspect import currentframe,getmodule
import sys

class ProtectedModule(ModuleType):
    def __init__(self,module=None):
        if module is None:
            module = getmodule(currentframe(1))
        ModuleType.__init__(self,module.__name__,module.__doc__)
        self.__dict__.update(module.__dict__)
        sys.modules[self.__name__] = self

    def __setattr__(self,attr,value):
        frame = currentframe(1)
        raise ValueError("Attempt to monkey patch module %s from %s,line %d" % 
            (self.__name__,frame.f_code.co_filename,frame.f_lineno))        

if __name__ == "__main__":
    from xml.etree import ElementTree as ET
    ET = ProtectedModule(ET)
    print dir(ET)
    ET.bla = 10
    print ET.bla

相关文章

在这篇文章中,我们深入学习了XPath作为一种常见的网络爬虫技巧。XPath是一种用于定位和选择XML文档中特...
祝福大家龙年快乐!愿你们的生活像龙一样充满力量和勇气,愿你们在新的一年里,追逐梦想,勇往直前,不...
今天在爬虫实战中,除了正常爬取网页数据外,我们还添加了一个下载功能,主要任务是爬取小说并将其下载...
完美收官,本文是爬虫实战的最后一章了,所以尽管本文着重呈现爬虫实战,但其中有一大部分内容专注于数...
JSON是一种流行的数据传输格式,Python中有多种处理JSON的方式。官方的json库是最常用的,它提供了简单...
独立样本T检验适用于比较两组独立样本的均值差异,而配对T检验则适用于比较同一组样本在不同条件下的均...