TypeError: 'NoneType' object is not subscriptable

72 views
Skip to first unread message

Mauricio Tavares

unread,
Sep 30, 2021, 9:25:34 AM9/30/21
to Python Brasil
Pessoal, boa noite...

Tudo bem??

Estou com um problema em um exercicio da pós-graduação, onde tenho que criar uns nós e depois a relação entre eles.

A criação dos nós está tranquila, está funcionando de boa...
mas quando vou tentar crias a relações, dá um erro que não estou conseguindo resolvê-lo..

Deve ser uma besteira na sintaxe, mas até agora não encontrei....

O código é este..
from neo4j import GraphDatabase

class ConnGraphDatabase:

    def __init__(self, uri, user, password):
        self.driver = GraphDatabase.driver(uri, auth=(user, password))

    def close(self):
        self.driver.close()

    def cria_usuario(self, message):
        with self.driver.session() as session:
            greeting = session.write_transaction(self._create_and_return_usuario, message)
            print(greeting)

    def cria_relacao(self, person1_name, person2_name):
        with self.driver.session() as session:
            greeting = session.write_transaction(self._create_relationship, person1_name, person2_name)
            print(greeting)

    @staticmethod
    def _create_and_return_usuario(tx, message):
        result = tx.run("CREATE (a:Usuario) "
                        "SET a.name = $message "
                        "RETURN a.nome + ', from node ' + id(a)", message=message)
        return result.single()[0]

    @staticmethod
    def _create_relationship(tx, person1_name, person2_name):
        query = (
            "MATCH (u:Usuario {name: $person1_name })"
            "MATCH (s:Usuario {name: $person2_name })"
            "CREATE (u)-[:FOLLOWS]->(s)")
            
        result = tx.run(query, person1_name=person1_name, person2_name=person2_name)

        return result.single()[0]

if __name__ == "__main__":
    greeter = ConnGraphDatabase("bolt://localhost:7687", "app_redesocial", "10203040")
    #greeter.cria_usuario("Bob")
    #greeter.cria_usuario("Alice")
    #greeter.cria_usuario("Lea")
    #greeter.cria_usuario("Ana")
    #greeter.cria_usuario("Joel")
    #greeter.cria_usuario("Martha")
    #greeter.cria_usuario("Joao")
    #greeter.cria_usuario("Mara")
    
    greeter.cria_relacao("Ana", "Joel")

    greeter.close()



e o erro que dá quando tenho executar é

python .\neoCreate.py
Traceback (most recent call last):
  File "C:\Aulas\Neo4J\neoCreate.py", line 52, in <module>
    greeter.cria_relacao("Ana", "Joel")
  File "C:\Aulas\Neo4J\neoCreate.py", line 19, in cria_relacao
    greeting = session.write_transaction(self._create_relationship, person1_name, person2_name)
  File "C:\Python39\lib\site-packages\neo4j\work\simple.py", line 434, in write_transaction
    return self._run_transaction(WRITE_ACCESS, transaction_function, *args, **kwargs)
  File "C:\Python39\lib\site-packages\neo4j\work\simple.py", line 338, in _run_transaction
    result = transaction_function(tx, *args, **kwargs)
  File "C:\Aulas\Neo4J\neoCreate.py", line 38, in _create_relationship
    return result.single()[0]
TypeError: 'NoneType' object is not subscriptable



Desde já agradeço a ajuda

Marcelo Valle

unread,
Sep 30, 2021, 12:04:13 PM9/30/21
to Python Brasil
Na linha `return result.single()[0]`, `return result.single()` está retornando None, causando o erro.
Você pode ver isso pelo stack trace que você colocou na mensagem. 

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/17b6fe8c-e53a-4b9f-99bd-178f2758669en%40googlegroups.com.

Mauricio Tavares

unread,
Sep 30, 2021, 2:58:16 PM9/30/21
to Python Brasil
Então, será que o "erro" estaria aqui??

query = (
            "MATCH (u:Usuario {name: $person1_name })"
            "MATCH (s:Usuario {name: $person2_name })"
            "CREATE (u)-[:FOLLOWS]->(s)")
            
        result = tx.run(query, person1_name=person1_name, person2_name=person2_name)


Ou seja, na criação desta relação não está retornando algum valor?!?!?!?!?!

Marcelo Valle

unread,
Sep 30, 2021, 3:06:18 PM9/30/21
to Python Brasil
Reply all
Reply to author
Forward
0 new messages