Oi, Leonam! Como vai?
Seu código está bem estruturado e as validações estão corretas. Inclusive, testei chamando apenas a função (sem print) e o None não aparece.
O comportamento que você observou não é um erro na sua lógica, mas sim consequência de como funções funcionam em Python.
Quando ocorre uma exceção, sua função entra no bloco except, executa o print() com a mensagem de erro e termina sem retornar nenhum valor explicitamente. Em Python, toda função que termina sem return retorna automaticamente None.
Então, se você estiver chamando assim:
print(divide_colunas(pressoes, temperaturas))
acontece o seguinte:
- O
print() dentro do except exibe a mensagem. - A função retorna automaticamente
None. - O
print() externo imprime esse None.
Por isso aparece:
Mensagem de erro
None
Esse None não faz parte da mensagem. Ele é apenas o valor retornado pela função.
Para evitar isso, você pode escolher entre duas abordagens:
Opção 1: não usar print() dentro da função
Deixe a função apenas calcular ou lançar exceção:
def divide_colunas(pressoes, temperaturas):
if len(pressoes) != len(temperaturas):
raise ValueError("As listas têm tamanhos diferentes.")
resultado = []
for pressao, temperatura in zip(pressoes, temperaturas):
if temperatura == 0:
raise ZeroDivisionError("Não é possível dividir por zero.")
razao = pressao / temperatura
resultado.append((pressao, temperatura, round(razao, 4)))
return resultado
E trate o erro fora da função com try/except.
Opção 2: retornar a mensagem em vez de imprimir
def divide_colunas(pressoes, temperaturas):
try:
if len(pressoes) != len(temperaturas):
raise ValueError("As listas têm tamanhos diferentes.")
resultado = []
for pressao, temperatura in zip(pressoes, temperaturas):
if temperatura == 0:
raise ZeroDivisionError("Não é possível dividir por zero.")
razao = pressao / temperatura
resultado.append((pressao, temperatura, round(razao, 4)))
return resultado
except ValueError as e:
return str(e)
except ZeroDivisionError as e:
return f"{e}: A lista de temperaturas não pode ter valor 0."
Assim o print() externo exibirá apenas a mensagem, sem None.
Espero ter ajudado.
Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!