Python UnboundlocalError

Python UnboundlocalError

O não -controlado do Python parece muito confuso quando os recém -chegados ao Python experimentam pela primeira vez. No entanto, é muito fácil. Um terror não atribuído pode ocorrer devido a duas razões no Python, uma é quando você está tentando acessar o valor de uma variável antes de ser atribuída, e a segunda é quando o Python falha em diferenciar entre variáveis ​​globais e locais.

Esta posta.

Razão 1: Acessando a variável local antes de atribuir valor

Normalmente, quando o programador não está funcionando dentro de nenhuma função ou variáveis ​​de escopo local, tentando acessar uma variável antes de inicializá -la com um valor retorna o seguinte erro:

No entanto, quando o mesmo erro é executado com variáveis ​​locais, digamos dentro de uma função, o programa retorna o não -contrato, o que significa que não conseguiu encontrar a variável local enquanto o acessava. Para demonstrar isso, o seguinte código:

def func ():
impressão (x)
x = 420
func ()

Executado, produzirá o seguinte resultado:

Solução: Corrigindo a ordem de acesso da variável local

Para evitar encontrar esse erro, basta ver que você está inicializando a variável local com algum valor antes de tentar acessá -lo. O código correto para o exemplo acima é o seguinte:

def func ():
x = 420
impressão (x)
func ()

A variável “x”É atribuído um valor antes de ser acessado e agora, quando este programa é executado, produz o seguinte resultado no terminal:

A saída verifica que você corrigiu com sucesso o não -atendimento não atendido causado pela ordem errada de acessar a variável local.

Razão 2: Python não pode diferenciar entre variáveis ​​locais e globais

Esse motivo é um pouco confuso para a maioria dos novos entusiastas do Python e nada está logicamente errado no programa. Para demonstrar esse erro de uma maneira não confusa, vamos pegar o código a seguir para acessar uma variável global dentro de uma função:

x = 420
def func ():
impressão (x)
func ()

Este código produz a saída sem erros, que é a seguinte:

Mas quando alguma tarefa é feita para a variável global dentro da função, como:

x = 420
def func ():
impressão (x)
x = 33
func ()

Começa a produzir o não -atendido, como mostrado abaixo:

A razão para isso é que, assim que uma mudança na variável global é feita, o programa acha que o usuário deseja acessar e alterar uma variável local, devido à qual não descobre que a variável local e retorna o não -contrato.

Solução: Use a palavra -chave global para resolver confusão

A melhor maneira de resolver esse problema é simplesmente usar a palavra -chave "global" no início da função para dizer ao programa que essa variável local está vinculada à variável global. Para demonstrar esta solução, pegue o seguinte código:

x = 420
def func ():
global x
impressão (x)
x = 30
func ()

Isso produzirá a seguinte saída no terminal quando executada:

Você aprendeu com sucesso as razões para o não -contratanterror junto com sua solução.

Conclusão

O não -atendido não pode ser causado pela tentativa de acessar uma variável local antes de atribuir algum valor a ele, ou de outra forma, pode ser causado quando o programa não pode diferenciar se o usuário deseja acessar a variável local ou a variável global. Ambas as razões foram explicadas junto com sua demonstração e solução completamente neste post.