2016-06-12 181 views
3

我越來越想轉儲sympy表達YAML當此錯誤時:Sympy類型錯誤:無法確定關係的真值傾銷YAML

TypeError: cannot determine truth value of Relational 

我試圖轉儲是一組2 sympy.Symbol對象。我不確定sympy爲什麼試圖將它評估爲StrictLessThan對象。 sympy正試圖確定真值,也許是爲了評估mapping.sort()函數?

這裏是回溯:

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

的申述嘗試將組,其以類似的方式傾倒作爲一個字典,通過鍵 - 值對排序其項目,然後傾倒那些排序。我不知道sympy的詳細信息,但是對於排序,鍵和值的表示需要知道(對於一個集合,只有鍵被使用),並且通常使用字符串表示來完成,我想這會導致評估。所以mapping.sort()評估它使用鑰匙,而不是其他方式(如你在你的問題表明可能會出現的情況下)

但是它不只是這是問題的排序,sympy對象不能是sympy對象甩無需額外的申述程序:

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) 

所以我會從簡單的開始,通過使申述你的對象類型你我們e並且想要轉儲,然後這些收集也應該是可以弄虛作假的。


我使用的僅支持YAML 1.1規範過時的PyYAML我ruamel.yaml庫,而不是。在這個問題上,兩者應該以同樣的方式行事。

+0

感謝您的意見。明天我會試試看 – themantalope

+0

在[so]和ruamel.yaml/PyYAML文檔中有代表示例。如果這還不夠,你就知道在哪裏問,但確保包含一些最小的示例代碼(這使得幫助更容易)。 – Anthon

+0

嗨@安頓,感謝您的建議,我非常感謝。我之所以在這篇文章中沒有包含很多代碼,是因爲我已經將一些我想要轉儲的類加以分類,並且我不想發佈太多以至於願意幫助的人會被壓倒。如果您認爲我應該在帖子中加入其他內容,以幫助您和其他人更好地理解背景,請告訴我。我猜在我試圖簡潔的時候,我可能會削減太多。 – themantalope

相關問題