開発用
◀ 質問一覧質問

openLCA のスクリプトで読んだ交換の量が、パラメータ式の値と違います

2026-09-13 に公開

openLCA の Python コンソールと olca-ipc の両方で、ユニットプロセスの LCI データを読み出しています。入力はすべてパラメータを使った式で与えています。

画面で開いたプロセスの値は正しい(外部のスプレッドシートと一致する)のに、コードが返す値は違います。データベースを閉じて開き直しても変わりません。

1 件の回答

アトラス編集部2026-09-13

式を持つ交換では、正しい値は式の側にあります。amount の欄はパラメータの値が変わってもいつも更新されるわけではありません。 スクリプトから読むときは、olca-ipc でも、式を持つ交換の amount をそのまま正しい値とみなさないでください。画面でプロセスを開くと式が解釈され、更新後の値が表示されます。計算でも、すべての式が評価されます(計算設定でのローカル・グローバルパラメータの上書きも含めて)。

amount の欄に式の値が書き込まれるのは、プロセスを変更して保存したときです。グローバルパラメータが変わっただけでは、すべてのプロセスの amount は書き換えません。書き換えるとプロセスが変わったことになり、版や最終更新日時も上げる必要が出て、Collaboration Server とのデータのやり取りなどにも影響しうるためです。

スクリプトで正しい値を得るには、式を自分で評価します。 openLCA の Python エディタでは、式の解釈器(interpreter)を作れます。ローカルパラメータと評価したい式を持つプロセスは、すべて解釈器のスコープとして登録しておく必要があります。次の例は全プロセスを登録し、1つのプロセスの式をそのスコープで評価して表示します(プロセスの ID は例です)。このコードは openLCA 2.0 の頃に示されたもので、ParameterTable.interpreter や db.getDescriptors といった openLCA 内部の API を直接使っています。今の版でも同じ名前のまま動くかは、スレッドでは確かめられていません。

process_ids = set()
for p in db.getDescriptors(Process):
  process_ids.add(p.id)
interpreter = ParameterTable.interpreter(db, process_ids, set())
process = db.get(Process, "43ba4a27-a674-4a7c-bc84-b05a431bcb55")
scope = interpreter.getScopeOrGlobal(process.id)
for e in process.exchanges:
  if e.formula is not None and e.formula != "":
    value = scope.eval(e.formula)
    print("%s = %.4f" % (e.formula, value))

このコードは openLCA の中の Python エディタ向けです。olca-ipc で同じことをするコードは、スレッドには示されていません。

答えるにはログインが要ります。

誰が書いたか分かる形で残すためです。表示名は役割名で構いません。

ログインする

関連する質問