Python tenta…exceto

Resumo : neste tutorial, você aprenderá como usar a try...exceptinstruçã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 += 1Linguagem 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 syntaxLinguagem de código:  Sessão Shell  ( shell )

Neste exemplo, o interpretador Python detectou o erro na ifinstruçã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çãocurrent = float(input('- Current period:'))
  • O tipo de exceçãoValueError
  • 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 ValueErrorexceção.

Em Python, as exceções têm tipos diferentes, como TypeError,, NameErroretc.

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...exceptinstrução Python:

try:
    # code that may cause error
except:
    # handle errorsLinguagem de código:  Python  ( python )

A try...exceptdeclaração funciona da seguinte forma:

  • As instruções na trycláusula são executadas primeiro.
  • Se nenhuma exceção ocorrer, a exceptcláusula será ignorada e a execução da tryinstrução será concluída.
  • Se ocorrer uma exceção em qualquer instrução da trycláusula, o restante da cláusula será ignorado e a exceptcláusula será executada.

O fluxograma a seguir ilustra a try...exceptafirmação:

Python tenta...exceto

Portanto, para tratar exceções usando a try...exceptinstrução, você coloca o código que pode causar uma exceção na trycláusula e o código que trata as exceções na exceptcláusula.

Veja como você pode reescrever o programa e usar a try...exceptinstruçã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 exceptbloco:

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...exceptinstrução permite lidar com uma exceção específica. Para capturar uma exceção selecionada, coloque o tipo de exceção após a exceptpalavra-chave:

try:
    # code that may cause an exception
except ValueError as error:
    # code to handle the exceptionLinguagem 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:100Linguagem 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 zeroLinguagem de código:  Sessão Shell  ( shell )

Desta vez você teve a ZeroDivisionErrorexceção. Esta divisão por exceção zero é causada pela seguinte instrução:

change = (current - previous) * 100 / previousLinguagem de código:  Python  ( python )

E a razão é que o valor de previousé zero.

Lidando com múltiplas exceções

O try...exceptpermite lidar com múltiplas exceções especificando múltiplas exceptclá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 exceptcláusula:

try:
    # code that may cause an exception
except (Exception1, Exception2):
    # handle exceptionLinguagem de código:  Python  ( python )

O exemplo a seguir mostra como usar o try...exceptpara lidar com as exceções ValueErrore 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:120Linguagem 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 Exceptionbloco 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...excepta instrução Python para lidar com exceções normalmente.
  • Use exceções específicas no exceptbloco tanto quanto possível.
  • Use a except Exceptioninstrução para capturar outras exceções.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *