TypeError:hasattr():属性名必须是pymc中的字符串

时间:2014-07-11 07:20:25

标签: pymc mcmc

我查看了以下链接,但没有一个提供我正在寻找的解决方案

https://github.com/pymc-devs/pymc/issues/125

PyMC error : hasattr(): attribute name must be string

我必须编写一个函数,它给出了先验(和数据等其他东西)返回一个pymc模型。 例如

 m = pym.Model([fittable_params.values(), rv])
 return m

和调用函数,当我mcmc = pymc.MCMC(model)时 它给出了一个很长的错误

  Traceback (most recent call last):
  File "model_constructor.py", line 81, in <module>
  mcmc = pm.MCMC(model)
  File "/usr/local/lib/python2.7/dist-packages/pymc-2.3.2-py2.7-linux-i686.egg/pymc/MCMC.py",    line 81, in __init__
   **kwds)
  File "/usr/local/lib/python2.7/dist-packages/pymc-2.3.2-py2.7-linux-i686.egg/pymc/Model.py", line 195, in __init__
  Model.__init__(self, input, name, verbose)
  File "/usr/local/lib/python2.7/dist-packages/pymc-2.3.2-py2.7-linux-i686.egg/pymc/Model.py", line 98, in __init__
  ObjectContainer.__init__(self, input)
  File "/usr/local/lib/python2.7/dist-packages/pymc-2.3.2-py2.7-linux-i686.egg/pymc/Container.py", line 605, in __init__
conservative_update(self, input_to_file)
  File "/usr/local/lib/python2.7/dist-packages/pymc-2.3.2-py2.7-linux-i686.egg/pymc/Container.py", line 548, in conservative_update
if not hasattr(obj, k):
 TypeError: hasattr(): attribute name must be string

另一方面,如果在函数(返回模型)中,如果我

m = pm.MCMC([fittable_params.values(), rv])

运行正常,但该函数应该返回一个模型,以便用户可以在代码的其他部分对模型做任何他想做的事。

1 个答案:

答案 0 :(得分:1)

如果链接的解决方案不适合您,那么作为最后的手段,您可以从模型中删除非字符串属性,因为它们似乎无论如何都不会被使用。

for key in m.__dict__.keys():
    if not isinstance(key, basestring):
        del m.__dict__[key]