当前位置: 首页 > 面试题库 >

AttributeError:“模块”对象没有属性(使用cPickle时)

荆鸿畅
2023-03-14
问题内容

我正在尝试使用cPickle在远程环境中加载该功能。但是我得到了错误“’模块’对象没有属性…”。我真正困扰的是,即使无法加载,命名空间也已经包含了该属性。

import inspect
import cPickle as pickle
from run import run


def get_source(func): 
 sourcelines = inspect.getsourcelines(func)[0]
 sourcelines[0] = sourcelines[0].lstrip()
 return "".join(sourcelines)

def fun(f):
 return f()

def fun1():
 return 10

funcs = (fun, fun1)

sources = [get_source(func) for func in funcs]

funcs_serialized = pickle.dumps((fun.func_name,sources),0)

args_serialized = pickle.dumps(fun1,0)

#Creating the Environment where fun & fun1 doesnot exist 
del globals()['fun']
del globals()['fun1']

r = run()

r.work(funcs_serialized,args_serialized)

这是run.py

import cPickle as pickle

class run():
 def __init__(self):
  pass

 def work(self,funcs_serialized,args_serialized):

  func, fsources = pickle.loads(funcs_serialized)

  fobjs = [compile(fsource, '<string>', 'exec') for fsource in fsources]

    #After eval fun and fun1 should be there in globals/locals
  for fobj in fobjs:
   try: 
    eval(fobj)
    globals().update(locals())
   except:
    pass

  print "Fun1 in Globals: ",globals()['fun1']   
  print "Fun1 in locals: ",locals()['fun1']   
  arg = pickle.loads(args_serialized)

错误是

Fun1 in Globals:  <function fun1 at 0xb7dae6f4>
Fun1 in locals:  <function fun1 at 0xb7dae6f4>
Traceback (most recent call last):
  File "fun.py", line 32, in <module>
    r.work(funcs_serialized,args_serialized) 
  File "/home/guest/kathi/python/workspace/run.py", line 23, in work
    arg = pickle.loads(args_serialized)
AttributeError: 'module' object has no attribute 'fun1'

问题答案:

我发现此链接很有帮助:http :
//stefaanlippens.net/python-pickling-and-dealing-with-attributeerror-module-
object-has-no-attribute-thing.html

它提供了两种解决方案。更好的解决方案是添加到加载模块(或__main__)的头部:

from myclassmodule import MyClass

但是我认为应该有一个更好的解决方案。



 类似资料:
  • 问题内容: 我正在尝试使用Python下载网站的HTML源代码,但收到此错误。 我在这里遵循指南:http : //www.boddie.org.uk/python/HTML.html 我正在使用Python 3。 问题答案: 这适用于Python2.x。 对于Python 3,请在docs中查看:

  • 变得非常困惑。四处寻找,但找不到任何有用的帮助。我知道错误了 回溯(最近一次调用):文件“/Users/Andrew/Desktop/password.py”,第2行,格式为cgi。Fieldstorage()AttributeError:“模块”对象没有属性“Fieldstorage”

  • 问题内容: 我正在尝试运行一个简单的代码,并且在Canopy中安装了matplotlib和numpy的所有依赖项。还是我出错了。 错误: 我已经为numpy和matplotlib安装了依赖项:1.)libsvm-3.17.win64-py2.7 2.)pyparsing-2.0.3-1.win64-py2.7 3.)python-dateutil-2.4.2-2。 win64-py2.7 4.)p

  • 问题内容: 我正在尝试使用Selenium WebDriver生成Firefox实例。过去,在安装geckodriver并确保它位于我的PATH之后,我能够执行此操作。但是,我切换到使用phantomjs已有大约一年的时间,直到最近才决定再次试用Firefox。不幸的是,现在当我尝试实例化webdriver.Firefox对象时,我得到了AttributeError,称该对象没有称为“ Firef

  • 问题内容: 尝试运行python脚本时,出现错误。我正在使用Python 2.6。 完整错误: 问题答案: 我认为无论您要运行什么,都期望将其与python的特殊调试版本一起使用。通常在sys模块的标准发行版中找不到,并且我相信如果您构建调试python,它将在那里: http://docs.python.org/c-api/intro.html#debugging- builds 这可能也可能是

  • 问题内容: Python 2.7和Django 1.10错误: main / urls.py article / urls.py 结构体: APP / main / urls.py APP /文章/urls.py 问题答案: 在main / urls.py中 要么 您可以从Django文档中了解更多信息