Neste artigo veremos a alteração ocorrida na versão 3.6 do Python que estabelece um novo funcionamento para a instrução global.

A versão 3.6 do Python trouxe alterações que afetam códigos legados. Agora, para definir variáveis com a instrução global ou nonlocal é necessário que a mesma já esteja declarada no escopo externo.

A não utilização desta prática resulta numa exceção SintaxError e a aplicação é finalizada.

A seguir, há um exemplo de código legal que deixou de funcionar.

def fun():

    var = 10
    global var

O código acima se executado produz a seguinte exceção:

  File "main.py", line 5
    global var

SyntaxError: name 'var' is assigned to before global declaration

É interessante observar que a exceção é levantada no momento da execução do código. O Python geralmente levanta a exceção quando o cursor passa pelo local em que existe problema, porém, este caso foi tratado de maneira diferente.

É provavel que fora dado um tratamento diferencial para que possamos, ainda no momento da execução, corrigir nossos códigos. Sem dúvida essa é a melhor solução, do contrário, teríamos pacotes e scripts quebrando em todos os lugares.

A notificação dessa alteração pode ser vista nesta página .

A PEP que propos a alteração é a PEP 526 .



Tags python, python36, local, nonlocal

Comentários

comments powered by Disqus