Resumo : neste tutorial, você aprenderá como usar a try...except
instrução Python para lidar com exceções normalmente.
Em Python, existem dois tipos principais de erros: erros de sintaxe e exceções.
Erros de sintaxe
Ao escrever um código Python inválido, você receberá um erro de sintaxe. Por exemplo:
current = 1
if current < 10
current += 1
Linguagem de código: Python ( python )
Se você tentar executar este código, receberá o seguinte erro:
File "d:/python/try-except.py", line 2
if current < 10
^
SyntaxError: invalid syntax
Linguagem de código: Sessão Shell ( shell )
Neste exemplo, o interpretador Python detectou o erro na if
instrução:
, pois faltam dois pontos ( ) depois dela.
O interpretador Python mostra o nome do arquivo e o número da linha onde ocorreu o erro para que você possa corrigi-lo.
Exceções
Mesmo que seu código tenha sintaxe válida, isso pode causar um erro durante a execução.
Em Python, os erros que ocorrem durante a execução são chamados de exceções . As causas das exceções vêm principalmente do ambiente onde o código é executado. Por exemplo:
- Lendo um arquivo que não existe .
- Conectando-se a um servidor remoto que está offline.
- Entradas incorretas do usuário.
Quando ocorre uma exceção, o programa não a trata automaticamente. Isso resulta em uma mensagem de erro.
Por exemplo, o programa a seguir calcula o crescimento das vendas:
# get input net sales
print('Enter the net sales for')
previous = float(input('- Prior period:'))
current = float(input('- Current period:'))
# calculate the change in percentage
change = (current - previous) * 100 / previous
# show the result
if change > 0:
result = f'Sales increase {abs(change)}%'
else:
result = f'Sales decrease {abs(change)}%'
print(result)
Linguagem de código: Python ( python )
Como funciona.
- Primeiro, solicite aos usuários que insiram dois números: as vendas líquidas dos períodos anterior e atual.
- Em seguida, calcule o crescimento das vendas em porcentagem e mostre o resultado.
Ao executar o programa e inserir 120'
as vendas líquidas do período atual, o interpretador Python emitirá a seguinte saída:
Enter the net sales for
- Prior period:100
- Current period:120'
Traceback (most recent call last):
File "d:/python/try-except.py", line 5, in <module>
current = float(input('- Current period:'))
ValueError: could not convert string to float: "120'"
Linguagem de código: Sessão Shell ( shell )
O interpretador Python mostrou um traceback que inclui informações detalhadas da exceção:
- O caminho para o arquivo de código-fonte (
d:/python/try-except.py
) que causou a exceção. - A linha exata de código que causou a exceção (
line 5
) - A declaração que causou a exceção
current = float(input('- Current period:'))
- O tipo de exceção
ValueError
- A mensagem de erro:
ValueError: could not convert string to float: "120'"
Como float()
não foi possível converter a string 120'
em um número, o interpretador Python emitiu uma ValueError
exceção.
Em Python, as exceções têm tipos diferentes, como TypeError
,, NameError
etc.
Tratamento de exceções
Para tornar o programa mais robusto, você precisa tratar a exceção assim que ela ocorrer. Em outras palavras, você precisa capturar a exceção e informar os usuários para que eles possam corrigi-la.
Uma boa maneira de lidar com isso é não mostrar o que o interpretador Python retorna. Em vez disso, você substitui essa mensagem de erro por uma mais fácil de usar.
Para fazer isso, você pode usar a try...except
instrução Python:
try:
# code that may cause error
except:
# handle errors
Linguagem de código: Python ( python )
A try...except
declaração funciona da seguinte forma:
- As instruções na
try
cláusula são executadas primeiro. - Se nenhuma exceção ocorrer, a
except
cláusula será ignorada e a execução datry
instrução será concluída. - Se ocorrer uma exceção em qualquer instrução da
try
cláusula, o restante da cláusula será ignorado e aexcept
cláusula será executada.
O fluxograma a seguir ilustra a try...except
afirmação:
Portanto, para tratar exceções usando a try...except
instrução, você coloca o código que pode causar uma exceção na try
cláusula e o código que trata as exceções na except
cláusula.
Veja como você pode reescrever o programa e usar a try...except
instrução para tratar a exceção:
try:
# get input net sales
print('Enter the net sales for')
previous = float(input('- Prior period:'))
current = float(input('- Current period:'))
# calculate the change in percentage
change = (current - previous) * 100 / previous
# show the result
if change > 0:
result = f'Sales increase {abs(change)}%'
else:
result = f'Sales decrease {abs(change)}%'
print(result)
except:
print('Error! Please enter a number for net sales.')
Linguagem de código: Python ( python )
Se você executar o programa novamente e inserir as vendas líquidas que não são um número, o programa emitirá a mensagem que você especificou no except
bloco:
Enter the net sales for
- Prior period:100
- Current period:120'
Error! Please enter a number for net sales.
Linguagem de código: Sessão Shell ( shell )
Capturando exceções específicas
Ao inserir as vendas líquidas do período anterior como zero, você receberá a seguinte mensagem:
Enter the net sales for
- Prior period:0
- Current period:100
Error! Please enter a number for net sales.
Linguagem de código: Sessão Shell ( shell )
Nesse caso, as vendas líquidas dos períodos anterior e atual são números, mas o programa ainda emite uma mensagem de erro. Outra exceção deve ocorrer.
A try...except
instrução permite lidar com uma exceção específica. Para capturar uma exceção selecionada, coloque o tipo de exceção após a except
palavra-chave:
try:
# code that may cause an exception
except ValueError as error:
# code to handle the exception
Linguagem de código: Python ( python )
Por exemplo:
try:
# get input net sales
print('Enter the net sales for')
previous = float(input('- Prior period:'))
current = float(input('- Current period:'))
# calculate the change in percentage
change = (current - previous) * 100 / previous
# show the result
if change > 0:
result = f'Sales increase {abs(change)}%'
else:
result = f'Sales decrease {abs(change)}%'
print(result)
except ValueError:
print('Error! Please enter a number for net sales.')
Linguagem de código: Python ( python )
Ao executar um programa e inserir uma string para as vendas líquidas, você receberá a mesma mensagem de erro.
Entretanto, se você inserir zero para as vendas líquidas do período anterior:
Enter the net sales for
- Prior period:0
- Current period:100
Linguagem de código: Sessão Shell ( shell )
… você receberá a seguinte mensagem de erro:
Traceback (most recent call last):
File "d:/python/try-except.py", line 9, in <module>
change = (current - previous) * 100 / previous
ZeroDivisionError: float division by zero
Linguagem de código: Sessão Shell ( shell )
Desta vez você teve a ZeroDivisionError
exceção. Esta divisão por exceção zero é causada pela seguinte instrução:
change = (current - previous) * 100 / previous
Linguagem de código: Python ( python )
E a razão é que o valor de previous
é zero.
Lidando com múltiplas exceções
O try...except
permite lidar com múltiplas exceções especificando múltiplas except
cláusulas:
try:
# code that may cause an exception
except Exception1 as e1:
# handle exception
except Exception2 as e2:
# handle exception
except Exception3 as e3:
# handle exception
Linguagem de código: Python ( python )
Isso permite que você responda a cada tipo de exceção de maneira diferente.
Se quiser ter a mesma resposta para alguns tipos de exceções, você pode agrupá-las em uma except
cláusula:
try:
# code that may cause an exception
except (Exception1, Exception2):
# handle exception
Linguagem de código: Python ( python )
O exemplo a seguir mostra como usar o try...except
para lidar com as exceções ValueError
e ZeroDivisionError
:
try:
# get input net sales
print('Enter the net sales for')
previous = float(input('- Prior period:'))
current = float(input('- Current period:'))
# calculate the change in percentage
change = (current - previous) * 100 / previous
# show the result
if change > 0:
result = f'Sales increase {abs(change)}%'
else:
result = f'Sales decrease {abs(change)}%'
print(result)
except ValueError:
print('Error! Please enter a number for net sales.')
except ZeroDivisionError:
print('Error! The prior net sales cannot be zero.')
Linguagem de código: Python ( python )
Ao inserir zero para as vendas líquidas do período anterior:
Enter the net sales for
- Prior period:0
- Current period:120
Linguagem de código: Sessão Shell ( shell )
… você receberá o seguinte erro:
Error! The prior net sales cannot be zero.
Linguagem de código: Sessão Shell ( shell )
É uma boa prática detectar outros erros gerais colocando o catch Exception
bloco no final da lista:
try:
# get input net sales
print('Enter the net sales for')
previous = float(input('- Prior period:'))
current = float(input('- Current period:'))
# calculate the change in percentage
change = (current - previous) * 100 / previous
# show the result
if change > 0:
result = f'Sales increase {abs(change)}%'
else:
result = f'Sales decrease {abs(change)}%'
print(result)
except ValueError:
print('Error! Please enter a number for net sales.')
except ZeroDivisionError:
print('Error! The prior net sales cannot be zero.')
except Exception as error:
print(error)
Linguagem de código: Python ( python )
Resumo
- Use
try...except
a instrução Python para lidar com exceções normalmente. - Use exceções específicas no
except
bloco tanto quanto possível. - Use a
except Exception
instrução para capturar outras exceções.