Escopo de Variáveis
Visão Geral
Perguntas
Como chamadas de função realmente funcionam?
Como posso determinar onde erros ocorreram?
Objetivos
Identificar variáveis locais e globais.
Identificar parâmetros como variáveis locais.
Leia um traceback e determine o arquivo, função e número da linha no qual o erro ocorreu, o tipo de erro, e a mensagem de erro.
O escopo de uma variável é a parte do programa que pode ‘ver’ essa variável.
- Só existem tantos nomes sensíveis para variáveis.
- Quando estamos usando funções, não devemos ter que nos preocupar com os nomes das variáveis que quem escreveu a função escolheu.
- Pessoas escrevendo funções não devem ter que se preocupar com que nomes de variáveis quem está chamando a função usa.
- A parte de um programa na qual uma variável está visível é o seu escopo.
pressao = 103.9
def ajustar(t):
temperatura = t * 1.43 / pressao
return temperatura
pressao
é uma variável global.- Definida fora de uma função em particular.
- Visível em todos os lugares.
t
etemperatura
são variáveis locais emajustar
.- Definidas nas função.
- Não visíveis no programa principal.
- Lembre-se: um parâmetro de função é uma variável que é automaticamente assinalada a um valor quando a função é chamada.
print('ajustada:', ajustar(0.9))
print('temperatura depois da chamada:', temperatura)
ajustada: 0.01238691049085659
Traceback (most recent call last):
File "/Users/xlab/temp.py", line 8, in <module>
print('temperatura depois da chamada:', temperatura)
NameError: name 'temperature' is not defined
Uso Local e Global de Variáveis
Trace os valores de todas as variáveis nesse programa conforme ele é executado. (Use ‘—’ como o valor das variáveis antes e depois deles existirem.)
limite = 100 def limitar(valor): return min(max(0.0, valor), limite) valor = -22.5 print(limitar(valor))
Lendo Mensagens de Erro
Leia o erro abaixo, e identifique o seguinte:
- Quantos níveis tem o traceback?
- Qual é o nome do arquivo onde o erro ocorreu?
- Qual é o nome da função onde o erro ocorreu?
- Em que número de linha da função esse erro ocorreu?
- Qual é o tipo de erro?
- Qual é a mensagem de erro?
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-2-e4c4cbafeeb5> in <module>() 1 import erros_02 ----> 2 erros_02.imprimir_mensagem_sexta() /Users/vini/xlab/cpfl/erros_02.py in imprimir_mensagem_sexta() 13 14 def imprimir_mensagem_sexta(): ---> 15 imprimir_mensagem("Sexta") /Users/vini/xlab/cpfl/erros_02.py in imprimir_mensagem(dia) 9 "domingo": "A semana está quase acabando." 10 } ---> 11 print(messages[dia]) 12 13 KeyError: 'Sexta'
Solução
- Três níveis.
erros_02.py
imprimir_mensagem
- Linha 11.
KeyError
. Esses erros ocorrem quando estamos tentando procurar uma chave que não existe (geralmente em uma estrutura de dados como um dicionário). Podemos encontrar mais informações sobre oKeyError
e outras exceções embutidas na documentação do Python.KeyError: 'Sexta'
Pontos-chave
O escopo de uma variável é a parte do programa que pode ‘ver’ essa variável.