2016-06-12 13 views
3

に投棄する際に関係の真理値を決定することはできませんsympy.Symbolオブジェクト私はなぜsympyがStrictLessThanオブジェクトとして評価しようとしているのか分かりません。 sympyが実際にmapping.sort()関数を評価するために真理値を決定しようとしていますか?ここSympyはTypeError:</p> <pre><code>TypeError: cannot determine truth value of Relational </code></pre> <p>私はダンプしようとしている何2とセットである:YAMLにsympy表現をダンプしようとしたとき、私はこのエラーを取得していYAML

がトレースバックである:

Traceback (most recent call last): 
    File "E:/Matt/Documents/ProgrammingProjects/infinitree/abg.py", line 267, in <module> 
    print yaml.dump(mtree) 
    File "C:\Python27\lib\site-packages\yaml\__init__.py", line 202, in dump 
    return dump_all([data], stream, Dumper=Dumper, **kwds) 
    File "C:\Python27\lib\site-packages\yaml\__init__.py", line 190, in dump_all 
    dumper.represent(data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 28, in represent 
    node = self.represent_data(data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 61, in represent_data 
    node = self.yaml_multi_representers[data_type](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 434, in represent_object 
    u'tag:yaml.org,2002:python/object:'+function_name, state) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 61, in represent_data 
    node = self.yaml_multi_representers[data_type](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 434, in represent_object 
    u'tag:yaml.org,2002:python/object:'+function_name, state) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 57, in represent_data 
    node = self.yaml_representers[data_types[0]](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 223, in represent_dict 
    return self.represent_mapping(u'tag:yaml.org,2002:map', data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 61, in represent_data 
    node = self.yaml_multi_representers[data_type](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 434, in represent_object 
    u'tag:yaml.org,2002:python/object:'+function_name, state) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 61, in represent_data 
    node = self.yaml_multi_representers[data_type](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 434, in represent_object 
    u'tag:yaml.org,2002:python/object:'+function_name, state) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 57, in represent_data 
    node = self.yaml_representers[data_types[0]](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 223, in represent_dict 
    return self.represent_mapping(u'tag:yaml.org,2002:map', data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 57, in represent_data 
    node = self.yaml_representers[data_types[0]](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 223, in represent_dict 
    return self.represent_mapping(u'tag:yaml.org,2002:map', data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 61, in represent_data 
    node = self.yaml_multi_representers[data_type](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 434, in represent_object 
    u'tag:yaml.org,2002:python/object:'+function_name, state) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 123, in represent_mapping 
    node_value = self.represent_data(item_value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 57, in represent_data 
    node = self.yaml_representers[data_types[0]](self, data) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 229, in represent_set 
    return self.represent_mapping(u'tag:yaml.org,2002:set', value) 
    File "C:\Python27\lib\site-packages\yaml\representer.py", line 120, in represent_mapping 
    mapping.sort() 
    File "C:\Python27\lib\site-packages\sympy\core\relational.py", line 195, in __nonzero__ 
    raise TypeError("cannot determine truth value of Relational") 
TypeError: cannot determine truth value of Relational 

答えて

2

representerはキーと値のペアによって、そのアイテムをソートし、それらをダンプすることにより、辞書と同様の方法でダンプされるセットをソートしようとします。私はsympyの詳細を知らないが、ソートのためにキーと値の表現は知っている必要がある(セットのためにキーのみが使用される)。そしてそれはしばしば文字列表現を使って行われる。評価。だから、mapping.sort()は、それが問題であるだけでソートではありませんしかし、sympyオブジェクトをすることはできません、それはキーではなく、周りの他の方法として使用していますsympyオブジェクト(あなたがあなたの質問に示すように、ケースだったかもしれない)

を評価します追加representerルーチンなしでダンプ:

同様のエラー
import sys 
import ruamel.yaml 
from sympy.abc import x, y 
from sympy.core.relational import Relational 

data = Relational(y, x+x**2, '==') 

ruamel.yaml.round_trip_dump(data, sys.stdout) 

ruamel.yaml.representer.RepresenterError: cannot represent an object: Eq(y, x**2 + x) 

だから私はあなたたち、あなたのオブジェクトタイプのためrepresentersを行うことによって、シンプル開始しますeをダンプしたい場合は、それらのコレクションをダンプ可能にする必要があります。


私は私のruamel.yamlライブラリーの代わりにのみYAML 1.1仕様をサポートしている時代遅れのPyYAMLとを使用していました。両方とも、この問題に関して同じように行動しなければならない。

+0

ありがとうございます。私は明日にそれを打ち明けます – themantalope

+0

[so]とruamel.yaml/PyYAMLの文書には、ここに代表例があります。これで十分ではない場合は、どこから尋ねるかを知っていますが、最小限のサンプルコードを含めるようにしてください。 – Anthon

+0

こんにちは@Anton、提案のおかげで、私は本当にそれを感謝します。私は、私がダンプしようとしているクラスのいくつかをサブクラス化していたので、ポストにはたくさんのコードが含まれていなかったので、助けてくれる人が圧倒されるほど多くの投稿をしたくなかった。あなたと他の人が文脈をよりよく理解するのを助ける投稿に含めるべきだと思うものが他にもあるなら、私に知らせてください。私が推測すると、私は簡潔にしようとすると、あまりにも多く切り取ったかもしれない。 – themantalope

関連する問題

 関連する問題