Descrição
Existe uma inconsistência na coerção booleana (truthiness) de listas vazias ao utilizar o operador !. O interpretador avalia corretamente uma lista vazia como falsa quando ela está dentro de uma estrutura condicional se ! pilha. No entanto, fora de uma condicional (como na instrução retorna ! pilha), a lista vazia é avaliada como um objeto existente/verdadeiro, fazendo com que a negação ! resulte incorretamente em falso.
Nota: Embora o operador ! seja uma particularidade do dialeto e não exista nativamente no Python (que utiliza not), o comportamento de avaliação do conteúdo da lista deveria ser consistente em todas as estruturas do Pituguês.
Como reproduzir
Executar uma função que use a negação de uma lista vazia no retorno:
funcao teste():
pilha = []
retorna ! pilha
Comportamento esperado
O operador ! deve se comportar de forma consistente com o comportamento de truthiness do Python (onde listas vazias são avaliadas como falsas). Se se ! pilha entende que a pilha vazia é falsa (e executa o bloco), a expressão retorna ! pilha deveria resolver de forma idêntica e retornar verdadeiro.
Comportamento real
O retorna ! pilha avalia o objeto existente da lista e retorna falso, ignorando se ela possui ou não elementos.
Workaround
Usar explicitamente a checagem de tamanho: retorna tamanho(pilha) == 0.
Descrição
Existe uma inconsistência na coerção booleana (truthiness) de listas vazias ao utilizar o operador
!. O interpretador avalia corretamente uma lista vazia como falsa quando ela está dentro de uma estrutura condicionalse ! pilha. No entanto, fora de uma condicional (como na instruçãoretorna ! pilha), a lista vazia é avaliada como um objeto existente/verdadeiro, fazendo com que a negação!resulte incorretamente em falso.Nota: Embora o operador
!seja uma particularidade do dialeto e não exista nativamente no Python (que utilizanot), o comportamento de avaliação do conteúdo da lista deveria ser consistente em todas as estruturas do Pituguês.Como reproduzir
Executar uma função que use a negação de uma lista vazia no retorno:
Comportamento esperado
O operador
!deve se comportar de forma consistente com o comportamento de truthiness do Python (onde listas vazias são avaliadas como falsas). Sese ! pilhaentende que a pilha vazia é falsa (e executa o bloco), a expressãoretorna ! pilhadeveria resolver de forma idêntica e retornar verdadeiro.Comportamento real
O
retorna ! pilhaavalia o objeto existente da lista e retorna falso, ignorando se ela possui ou não elementos.Workaround
Usar explicitamente a checagem de tamanho:
retorna tamanho(pilha) == 0.