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.

Se os dados não estão em um formato JSON válido, decodificá-los com

json.loads gera um erro ValueError. A exceção é capturada pelo bloco except e

tratada. Se por outro lado a decodificação tiver sucesso (ou seja, não gera erros),

a busca pela chave ocorrerá no bloco else. Se a busca pela chave retornar

qualquer exceção, esta será propagada para o chamador porque está fora do

bloco try. A cláusula else assegura que o que está depois do try/except é

visualmente separado do bloco except, o que deixa muito claro qual é o

comportamento da propagação da exceção.

Tudo ao mesmo tempo agora

Use try/except/else/finally (em português, tente/exceto se/senão/finalmente)

quando se quer fazer tudo isso em uma única estrutura composta. Por exemplo,

imagine que se queira ler de um arquivo a descrição do trabalho a ser feito,

processá-lo de atualizar o arquivo automaticamente. O bloco try é usado aqui

para ler o arquivo e processá-lo. O bloco except é usado para tratar exceções

geradas pelo bloco try e que sejam esperadas. O bloco else é usado para atualizar

o arquivo e para permitir que exceções relacionadas possam propagar-se para o

nível superior. O bloco finally limpa o manipulador de arquivo.

UNDEFINED = object()

def divide_json(path):

handle = open(path, 'r+') # Pode gerar o erro IOError

try:

data = handle.read() # Pode gerar o erro UnicodeDecodeError

op = json.loads(data) # Pode gerar o erro ValueError

value = (

op['numerator'] /

op['denominator']) # Pode gerar o erro ZeroDivisionError

except ZeroDivisionError as e:

return UNDEFINED

else:

op['result'] = value

result = json.dumps(op)

handle.seek(0)

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!