2013-09-27 3 views
0

py2neo를 사용하여 neo4j를 쿼리 할 때 오류가 발생하고 해결할 수 없습니다. 내 코드 :py2neo - 쿼리의 UnicodeEncodeError

data, metadata = cypher.execute(self._db, 'START s=node:pages(title="%s") MATCH (s)-[r]->(n) RETURN n.title' % topic) 

그리고 오류

File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher.py", line 50, in execute 
    results = query.execute(**params or {}) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 1011, in execute 
    return CypherResults(self._execute(**params)) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 1053, in __init__ 
    self._data = [record(*_hydrated(row)) for row in content["data"]] 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 178, in _hydrated 
    return type(data)([_hydrated(datum) for datum in data]) 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/neo4j.py", line 177, in _hydrated 
    elif is_collection(data): 
    File "/usr/local/lib/python2.7/dist-packages/py2neo/util.py", line 134, in is_collection 
    hasattr(None, obj) 
None: 'ascii' codec can't encode character u'\xeb' in position 5: ordinal not in range(128) 

모든 단서?

감사합니다

답변

0

내가 거기 topic에서 비 ASCII 바이트, 그리고 그게 원인을 무엇 아마 말할 것입니다. 해당 문제가있는 경우 시도해 볼 수 있습니다.

data, metadata = cypher.execute(self._db, u'START s=node:pages(title="%s") MATCH (s)-[r]->(n) RETURN n.title' % topic) 

그리고 실제로 문제가 해결 될 수도 있습니다. (나는 단지 이것을 논평 하겠지만 미안합니다.) 그게 효과가 없다면 시도해보십시오 :

(u'STATE s=node:...' ... % topic.decode('utf-8')).encode('utf-8') 

그럴 겁니다.

1

예기치 않은 바이트 시퀀스 또는 쿼리 결과 데이터의 문자 집합에 의해 트리거 된 py2neo의 버그 일 수 있습니다. UTF-8을 사용하고 있는지 여부와 반환 할 것으로 예상되는 데이터를 자세히 설명 할 수 있습니까?

+0

저는 UTF-8을 사용하고 있습니다. 또한이 문제는 py2neo 버전 1.6에서 발생하지만 1.5.1에서는 발생하지 않는 것으로 나타났습니다. – user1491915

+0

나는 util.py의 is_collection 메소드에 UnicodeEncodeError (False를 반환)를 추가하는 것이 좋습니다. – user1491915

+0

이 문제는 GitHub에서 제기되었습니다. https://github.com/nigelsmall/py2neo/issues/187 –