导入直方图时的Pyroot AttributeError

时间:2015-10-27 07:20:54

标签: python linux root-framework pyroot

我有pyroot的问题。当我尝试导入ROOT直方图时,我总是得到相同的AttributeError。

>>> from ROOT import TH1F
AttributeError: type object 'TArray' has no attribute '__getitem__'

During handling of the above exception, another exception occurred:

SystemError: <built-in method mro of ROOT.PyRootType object at 0x328fb18> returned a result with an error set
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'TH1F'

我也试过rootpy但是没用。可能相关吗?

我安装了Python 3.5并使用gcc 5.2.0彻底安装了ROOT。运行root-config --features时会列出Python模块。

有什么想法吗?还是解决方案?

1 个答案:

答案 0 :(得分:4)

您遇到的问题与Python最近的更改有关,它解决了错误的异常处理问题。 Pythonize.cxx包装器中的调用尝试将__getitem__属性重命名为不存在的类TArray。这导致了一个AttributeError,在新的python3.5版本发布之前,它在Python中被忽略了。

要恢复旧行为,您需要修改Utility.cxx目录中的文件$ROOTSYS/bindings/pyroot/src/。搜索方法

Bool_t PyROOT::Utility::AddToClass( PyObject* pyclass, const char* label, const char* func )

应该在第230行附近。在这个方法中是if条件:

if ( ! pyfunc )
    return kFALSE;

在这里,您需要使用以下行替换上面的代码:

if ( ! pyfunc ) {
   PyErr_Clear();
   return kFALSE;
}

PyErr_Clear()的来电将解决这个问题。保存文件并重新编译ROOT安装。这应该可以解决问题。

编辑:此问题已有错误报告:https://sft.its.cern.ch/jira/browse/ROOT-7640