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.

exceções mais específicas em certas situações. Por exemplo, poderíamos querer

adicionar uma subclasse de Exception que indique uma condição de erro

especial quando são informadas densidades negativas.

# my_module.py

class NegativeDensityError(InvalidDensityError):

"""A provided density value was negative."""

def determine_weight(volume, density):

if density < 0:

raise NegativeDensityError

O código chamador continuará funcionando exatamente como antes porque ele

já captura exceções InvalidDensityError (a classe-mãe de

NegativeDensityError). No futuro, o chamador pode decidir criar um novo tipo

de exceção para esse caso especial e alterar o comportamento de acordo com a

necessidade.

try:

weight = my_module.determine_weight(1, -1)

except my_module.NegativeDensityError as e:

raise ValueError('Must supply non-negative density') from e

except my_module.InvalidDensityError:

weight = 0

except my_module.Error as e:

logging.error('Bug in the calling code: %s', e)

except Exception as e:

logging.error('Bug in the API code: %s', e)

raise

Podemos melhorar ainda mais a segurança futura da API ao oferecer um

conjunto mais amplo de exceções diretamente abaixo da exceção-raiz. Por

exemplo, imagine que tenhamos um conjunto de erros relacionados ao cálculo de

pesos, outro relacionado ao cálculo de volume e um terceiro ao cálculo de

densidade.

# my_module.py

class WeightError(Error):

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!