Why is the variable 'data' not defined?

Asked

Viewed 852 times

3

Code:

arquivo = open("surfing_data.csv")
id_de_verificação = int(input("Insira a ID do surfista desejado: "))

def pesquisa_de_surfista(pesquisa):
    dados = {}
    for linha in arquivo:
        (ID, nome, pais, média, prancha, idade) = linha.split(";")
        dados[ID] = (nome, pais, média, prancha, idade)
        print(ID)
        if pesquisa == ID:
            arquivo.close()
sufista = pesquisa_de_surfista(id_de_verificação)

if sufista:
    print("ID:          " + sufer['id'])
    print("Nome:        " + sufer['nome'])
    print("Pais:        " + sufer['pais'])
    print("Média:       " + sufer['média'])
    print("Prancha:     " + sufer['prancha'])
    print("Idade:       " + sufer['idade'])
print(dados)

Error message:

Traceback (most recent call last):
  File "identificação de surfistas.py", line 22, in <module>
    print(dados)
NameError: name 'dados' is not defined
  • 1

    You edited the question, changed its context and just invalidated the answers that were given. Please reverse the edit open another question with the new question.

  • why this within the function, and variables within the function are not accessed outside it.

1 answer

2


The line 22 is this:

print(dados)

We will organize the code and post comments to facilitate understanding:

#Aqui é apenas um função, ela só será executada se for explicitamente chamada pelo código

def pesquisa_de_surfista(pesquisa):
    dados = {}
    for linha in arquivo:
        (ID, nome, pais, média, prancha, idade) = linha.split(";")
        dados[ID] = (nome, pais, média, prancha, idade)
        print(ID)
        if pesquisa == ID:
            arquivo.close()

#Aqui começa efetivamente o código a ser executado, a função terminou

arquivo = open("surfing_data.csv")
id_de_verificação = int(input("Insira a ID do surfista desejado: "))

sufista = pesquisa_de_surfista(id_de_verificação)    
if sufista:
    print("ID:          " + sufer['id'])
    print("Nome:        " + sufer['nome'])
    print("Pais:        " + sufer['pais'])
    print("Média:       " + sufer['média'])
    print("Prancha:     " + sufer['prancha'])
    print("Idade:       " + sufer['idade'])
print(dados)

The function pesquisa_de_surfista is totally separate from the rest of the code. What is inside does not exist outside.

So dados on line 22 does not exist at all. This is called scope. It exists within the function. If you want to pass the data from inside the function outwards you must return something.

Probably the solution would be:

def pesquisa_de_surfista(pesquisa):
    dados = {}
    for linha in arquivo:
        (ID, nome, pais, média, prancha, idade) = linha.split(";")
        dados[ID] = (nome, pais, média, prancha, idade)
        print(ID)
        if pesquisa == ID:
            arquivo.close()
    return dados

arquivo = open("surfing_data.csv")
id_de_verificação = int(input("Insira a ID do surfista desejado: "))

sufista = pesquisa_de_surfista(id_de_verificação)    
if sufista:
    print("ID:          " + sufer['id'])
    print("Nome:        " + sufer['nome'])
    print("Pais:        " + sufer['pais'])
    print("Média:       " + sufer['média'])
    print("Prancha:     " + sufer['prancha'])
    print("Idade:       " + sufer['idade'])
print(sufista)

The code probably has other errors.

I put in the Github for future reference.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.