1

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 をクリーン インストールしました。を実行すると、Python モジュールが一覧表示されますroot-config --features

何か案は?それとも解決策?

4

1 に答える 1

4

あなたが直面している問題は、間違った例外処理を解決した Python の最近の変更に関連しています。Pythonize.cxxラッパーでの呼び出しが、属性の名前を存在しない__getitem__クラスに変更しようとしています。TArrayこれは、新しい python3.5 リリースまで Python で無視された AttributeError につながります。

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

于 2015-10-27T08:41:32.717 に答える