Exceções

Em Python, é muito fácil realizar operações como divisão e manipulação de ficheiros. No entanto, por vezes, podem ocorrer erros durante a execução do programa, fazendo com que este pare abruptamente. É aqui que entra o tratamento de exceções. O Python utiliza blocos try e except para lidar com exceções. As operações que podem gerar exceções são colocadas dentro do bloco try, e o código para tratar essas exceções é colocado dentro do bloco except.
Considere uma operação de divisão simples:
a = int(input())
b = int(input())
print(a / b)
print('The program continues...')
No caso das entradas 10 e 2, o programa imprimiria 5.0 e The program continues.... Contudo, se inserirmos 10 e 0, o programa iria parar e imprimir uma mensagem de erro: ZeroDivisionError: division by zero.
Para lidar com este erro, podemos utilizar o tratamento de exceções:
try:                       # Tenta realizar as operações no bloco
    a = int(input())
    b = int(input())
    print(a / b)
except ZeroDivisionError:  # O que fazer se ocorrer um ZeroDivisionError
    print('Error: Division by zero is not allowed.')

print('The program continues...')
Agora, se executarmos o programa com as entradas 10 e 0, ele irá imprimir Error: Division by zero is not allowed. e The program continues....
Da mesma forma, podemos tratar outras exceções, como ValueError, que ocorre quando a entrada não é um número inteiro. Podemos adicionar outro bloco except para lidar com este erro:
try:
    a = int(input())
    b = int(input())
    print(a / b)
except ZeroDivisionError:
    print('Error: Division by zero is not allowed.')
except ValueError:
    print('Error: Input is not a valid integer.')
Podemos adicionar quantos blocos except forem necessários para tratar diferentes tipos de exceções. Desta forma, asseguramos que o nosso programa não pare abruptamente devido a erros e podemos fornecer mensagens úteis ao utilizador.
💡
É importante notar que a ordem dos blocos except importa. O Python executará o primeiro bloco except que corresponda ao tipo de erro ocorrido. Se nenhum dos blocos except corresponder, o erro não será tratado.
Também pode capturar múltiplas exceções numa única linha:
try:
    a = int(input())
    b = int(input())
    print(a / b)
except (ZeroDivisionError, ValueError) as e:
    print('Error:', e)
Aqui, e irá conter a instância da exceção levantada.
Utilizando o tratamento de exceções, podemos tornar os nossos programas Python mais robustos e fáceis de usar.

Desafio: Área de um Retângulo

Deve escrever um programa que lê dois números de ponto flutuante da entrada; esses números h e w representam a altura e a largura de um retângulo. A sua tarefa é calcular e imprimir a área do retângulo.
No entanto, nem todas as entradas são garantidamente números válidos. Se h ou w não forem números, deve tratar a exceção e imprimir The input is not a number.
A primeira linha da entrada contém a altura h e a segunda linha contém a largura w.
O programa deve imprimir uma única linha com a área do retângulo se as entradas forem números válidos ou The input is not a number se uma ou ambas as entradas não forem números válidos.
Entrada
Saída
5.2 7.8
40.56
3.7 abc
The input is not a number
abc 5.5
The input is not a number
abc def
The input is not a number
Nota: A entrada conterá apenas números positivos, caso sejam números.
 

Constraints

Time limit: 1 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue