Why is the 'data' variable not defined?

2

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
    
asked by anonymous 23.01.2017 / 23:14

1 answer

2

Line 22 is this:

print(dados)

Let's organize the code and put comments to make it easier to understand:

#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 pesquisa_de_surfista function is totally separate from the rest of the code. What is inside does not exist outside.

Then dados on line 22 does not even exist. This is called scope . It exists within the function. If you want to pass the data from inside the function to outside it should 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've placed it on GitHub for future reference .

    
23.01.2017 / 23:33