15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

deliberadamente pelo nosso módulo. Se não o fizerem, a exceção se propagará

por toda a hierarquia até se deparar com o bloco isolador do except, que captura

a exceção-raiz do módulo. Esse bloco chama a atenção do consumidor da API

para a exceção elevada, dando a eles a chance de adicionar código para tratar

especificamente esse tipo de exceção.

try:

weight = my_module.determine_weight(1, -1)

except my_module.InvalidDensityError:

weight = 0

except my_module.Error as e:

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

A segunda vantagem de usar exceções-raiz é que elas podem ajudar a encontrar

bugs no código-fonte da API. Se o código deliberadamente eleva apenas

exceções definidas dentro da hierarquia do módulo, quaisquer outras exceções

levantadas pelo módulo serão, necessariamente, exceções que não tínhamos a

intenção de gerar. Em última análise, elas indicam que há bugs no código da

nossa API.

Usar a estrutura try/except acima não protegerá os consumidores da API de bugs

no código. Para isolar-se desses bugs, o chamador precisará incluir outro bloco

except que capture a classe Exception, nativa do Python. Dessa forma, o

consumidor pode detectar também os bugs no código de nossa API que precisam

ser consertados.

try:

weight = my_module.determine_weight(1, -1)

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

O terceiro impacto de usar exceções-raiz é deixar a API à prova de futuro. À

medida que o sistema evolui, vamos querer expandir a API para oferecer

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!