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.

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: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

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