TypeError: hasattr(): имя атрибута должно быть строкой в ​​pymc

Я просмотрел следующие ссылки, но ни одна из них не дает решения, которое я ищу.

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

Ошибка PyMC: hasattr(): имя атрибута должно быть строкой

Мне нужно написать функцию, которая с учетом априорных значений (и других вещей, таких как данные и т. д.) возвращает модель 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])

она работает нормально, но функция должна возвращать модель, чтобы пользователь мог делать с ней все, что захочет, в других частях кода.


person turing    schedule 11.07.2014    source источник


Ответы (1)


Если связанные решения не работают для вас, в крайнем случае вы можете просто удалить нестроковые атрибуты из модели, поскольку они все равно не используются.

for key in m.__dict__.keys():
    if not isinstance(key, basestring):
        del m.__dict__[key]
person Tom Minka    schedule 17.10.2014