简体   繁体   English

py2neo中未处理的异常:类型错误

[英]Unhandled exception in py2neo: Type error

I am writing an application whose purpose is to create a graph from a journal dataset. 我正在编写一个应用程序,该应用程序的目的是从日记数据集中创建图形。 The dataset was a xml file which was parsed in order to extract leaf data. 数据集是一个xml文件,已对其进行了解析以提取叶数据。 Using this list I wrote a py2neo script to create the graph. 使用此列表,我编写了一个py2neo脚本来创建图形。 The file is attached to this message. 该文件将附加到此消息。 As the script was processed an exception was raised: 在处理脚本时,引发了一个异常:

The debugged program raised the exception unhandled TypeError "(1676 {"titulo":"reconhecimento e agrupamento de objetos de aprendizagem semelhantes"})" File: /usr/lib/python2.7/site-packages/py2neo-1.5.1-py2.7.egg/py2neo/neo4j.py, Line: 472 调试后的程序引发了未处理的异常TypeError“(1676 {” titulo“:” reprohecicimento e agrupamento de objetos de aprendizagem semelhantes“})”文件:/usr/lib/python2.7/site-packages/py2neo-1.5.1- py2.7.egg / py2neo / neo4j.py,行:472

I don't know how to handle this. 我不知道该如何处理。 I think that the code is syntactically correct...but... 我认为代码在语法上是正确的...但是...

I dont know if I shoud post the entire code here, so the code is at: https://gist.github.com/herlimenezes/6867518 我不知道是否应该在此处发布整个代码,因此代码位于: https : //gist.github.com/herlimenezes/6867518

There goes the code: +++++++++++++++++++++++++++++++++++ ' #!/usr/bin/env python # 代码如下:+++++++++++++++++++++++++++++++++++++'#!/ usr / bin / env python #

from py2neo import neo4j, cypher
from py2neo import node,  rel

# calls database service of Neo4j
#
graph_db = neo4j.GraphDatabaseService("DEFAULT_DOMAIN")
#
# following nigel small suggestion in http://stackoverflow.com
#
titulo_index = graph_db.get_or_create_index(neo4j.Node, "titulo")
autores_index = graph_db.get_or_create_index(neo4j.Node, "autores")
keyword_index = graph_db.get_or_create_index(neo4j.Node,  "keywords")
dataPub_index = graph_db.get_or_create_index(neo4j.Node, "data")
#
# to begin, database clear...

graph_db.clear()    # not sure if this really works...let's check...
#
# the big list, next version this is supposed to be read from a file...
#
listaBase = [['2007-12-18'], ['RECONHECIMENTO E AGRUPAMENTO DE OBJETOS DE APRENDIZAGEM SEMELHANTES'], ['Raphael Ghelman', 'SWMS', 'MHLB', 'RNM'], ['Objetos de Aprendizagem', u'Personaliza\xe7\xe3o', u'Perfil do Usu\xe1rio', u'Padr\xf5es de Metadados', u'Vers\xf5es de Objetos de Aprendizagem', 'Agrupamento de Objetos Similares'], ['2007-12-18'], [u'LOCPN: REDES DE PETRI COLORIDAS NA PRODU\xc7\xc3O DE OBJETOS DE APRENDIZAGEM'], [u'Maria de F\xe1tima Costa de Souza', 'Danielo G. Gomes', 'GCB', 'CTS', u'Jos\xe9 ACCF', 'MCP', 'RMCA'], ['Objetos de Aprendizagem', 'Modelo de Processo', 'Redes de Petri Colorida', u'Especifica\xe7\xe3o formal'], ['2007-12-18'], [u'COMPUTA\xc7\xc3O M\xd3VEL E UB\xcdQUA NO CONTEXTO DE UMA GRADUA\xc7\xc3O DE REFER\xcaNCIA'], ['JB', 'RH', 'SR', u'S\xe9rgio CCSPinto', u'D\xe9bora NFB'], [u'Computa\xe7\xe3o M\xf3vel e Ub\xedqua', u'Gradua\xe7\xe3o de Refer\xeancia', u' Educa\xe7\xe3o Ub\xedqua']]
#
pedacos = [listaBase[i:i+4] for i in range(0, len(listaBase), 4)] # pedacos = chunks
# 
# lists to collect indexed nodes: is it really useful???
# let's think about it when optimizing code...
dataPub_nodes = []
titulo_nodes = []
autores_nodes = []
keyword_nodes = []
#
# 
for i in range(0, len(pedacos)):
# fill dataPub_nodes and titulo_nodes with content.

#dataPub_nodes.append(dataPub_index.get_or_create("data", pedacos[i][0], {"data":pedacos[i][0]}))   # Publication date nodes...
dataPub_nodes.append(dataPub_index.get_or_create("data", str(pedacos[i][0]).strip('[]'), {"data":str(pedacos[i][0]).strip('[]')}))
# ------------------------------- Exception raised here...     --------------------------------
# The debugged program raised the exception unhandled TypeError
#"(1649 {"titulo":["RECONHECIMENTO E AGRUPAMENTO DE OBJETOS DE APRENDIZAGEM SEMELHANTES"]})"
#File: /usr/lib/python2.7/site-packages/py2neo-1.5.1-py2.7.egg/py2neo/neo4j.py, Line: 472
# ------------------------------  What happened??? ----------------------------------------

titulo_nodes.append(titulo_index.get_or_create("titulo", str(pedacos[i][1]).strip('[]'), {"titulo":str(pedacos[i][1]).strip('[]')}))    # title node...

# creates relationship publicacao
publicacao = graph_db.get_or_create_relationships(titulo_nodes[i], "publicado_em", dataPub_nodes[i])

# now processing autores sublist and collecting in autores_nodes
#
for j in range(0,  len(pedacos[i][2])):
    # fill autores_nodes list
    autores_nodes.append(autores_index.get_or_create("autor", pedacos[i][2][j], {"autor":pedacos[i][2][j]}))
    # creates autoria relationship...
    #
    autoria = graph_db.get_or_create_relationships(titulo_nodes[i], "tem_como_autor", autores_nodes[j])
    # same logic...
    #
    for k in range(0, len(pedacos[i][3])):
        keyword_nodes.append(keyword_index.get_or_create("keyword", pedacos[i][3][k]))
        # cria o relacionamento 'tem_como_keyword'
        tem_keyword = graph_db.get_or_create_relationships(titulo_nodes[i], "tem_como_keyword", keyword_nodes[k])

` `

The fragment of py2neo which raised the exception py2neo的片段引发了异常

    def get_or_create_relationships(self, *abstracts):
    """ Fetch or create relationships with the specified criteria depending
    on whether or not such relationships exist. Each relationship
    descriptor should be a tuple of (start, type, end) or (start, type,
    end, data) where start and end are either existing :py:class:`Node`
    instances or :py:const:`None` (both nodes cannot be :py:const:`None`).

    Uses Cypher `CREATE UNIQUE` clause, raising
    :py:class:`NotImplementedError` if server support not available.

    .. deprecated:: 1.5
        use either :py:func:`WriteBatch.get_or_create_relationship` or
        :py:func:`Path.get_or_create` instead.
    """
    batch = WriteBatch(self)
    for abstract in abstracts:
        if 3 <= len(abstract) <= 4:
            batch.get_or_create_relationship(*abstract)
        else:
            raise TypeError(abstract) # this is the 472 line.
    try:
        return batch.submit()
    except cypher.CypherError:
        raise NotImplementedError(
            "The Neo4j server at <{0}> does not support " \
            "Cypher CREATE UNIQUE clauses or the query contains " \
            "an unsupported property type".format(self.__uri__)
        )

====== Any help? ======有帮助吗?

I have already fixed it, thanks to Nigel Small. 感谢Nigel Small,我已经解决了它。 I made a mistake as I wrote the line on creating relationships. 当我写关于建立关系的台词时,我犯了一个错误。 I typed: publicacao = graph_db.get_or_create_relationships(titulo_nodes[i], "publicado_em", dataPub_nodes[i]) 我输入了以下内容:publicacao = graph_db.get_or_create_relationships(titulo_nodes [i],“ publicado_em”,dataPub_nodes [i])

and it must to be: 并且必须是:

publicacao = graph_db.get_or_create_relationships((titulo_nodes[i], "publicado_em", dataPub_nodes[i])) publicacao = graph_db.get_or_create_relationships(((titulo_nodes [i],“ publicado_em”,dataPub_nodes [i])))

By the way, there is also another coding error: keyword_nodes.append(keyword_index.get_or_create("keyword", pedacos[i][3][k])) must be keyword_nodes.append(keyword_index.get_or_create("keyword", pedacos[i][3][k], {"keyword":pedacos[i][3][k]})) 顺便说一句,还有另一个编码错误:keyword_nodes.append(keyword_index.get_or_create(“ keyword”,pedacos [i] [3] [k]))必须为keyword_nodes.append(keyword_index.get_or_create(“ keyword”,pedacos [i] [3] [k],{“关键字”:pedacos [i] [3] [k]}))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM