15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

result = divide(x, y)

if result is None:

print('Invalid inputs')

O que acontece se o numerador for zero? O valor de retorno também será zero,

desde que o denominador seja diferente de zero. Isso pode causar problemas, se

o resultado for avaliado em uma condição como as usadas no if. O programador

pode, por descuido ou acidente, testar a existência de qualquer valor equivalente

a False em vez de procurar especificamente por None (consulte o Item 4:

“Escreva funções auxiliares em vez de expressões complexas” para uma situação

semelhante).

x, y = 0, 5

result = divide(x, y)

if not result:

print('Invalid inputs') # Isso está errado!

Esse é um erro muito comum em Python quando se atribui um significado

especial ao valor None. Usar None como valor de retorno em uma função tende,

invariavelmente, a atrair problemas. Há duas maneiras de reduzir a possibilidade

de ocorrência desses erros.

A primeira é dividir o valor de retorno em uma tupla de dois elementos. A

primeira parte da tupla indica se a operação foi um sucesso ou não. A segunda é

o resultado real computado.

def divide(a, b):

try:

return True, a / b

except ZeroDivisionError:

return False, None

Os chamadores dessa função precisam desempacotar a tupla, o que os força a

pelo menos tomar conhecimento do status da operação, em vez de simplesmente

olhar o resultado da divisão.

success, result = divide(x, y)

if not success:

print('Invalid inputs')

O problema dessa solução é que os chamadores podem facilmente ignorar a

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!