Python - Tratamento de Exceções
O Python fornece dois recursos muito importantes para lidar com qualquer erro inesperado em seus programas Python e adicionar recursos de depuração neles -
-
Tratamento de exceções − Isso seria abordado neste tutorial. Aqui está uma lista de exceções padrão disponíveis em Python:Exceções padrão.
-
Afirmações − Isso seria abordado no tutorial Assertions in Python.
Lista de Exceções Padrão -
| Nº Sr. | Nome e descrição da exceção |
|---|---|
| 1 | Exceção Classe base para todas as exceções |
| 2 | Parar Iteração Gerado quando o método next() de um iterador não aponta para nenhum objeto. |
| 3 | Sair do sistema Gerado pela função sys.exit(). |
| 4 | Erro Padrão Classe base para todas as exceções internas, exceto StopIteration e SystemExit. |
| 5 | Erro Aritmético Classe base para todos os erros que ocorrem no cálculo numérico. |
| 6 | Erro de estouro Gerado quando um cálculo excede o limite máximo para um tipo numérico. |
| 7 | FloatingPointError Gerado quando um cálculo de ponto flutuante falha. |
| 8 | ZeroDivisionError Gerado quando a divisão ou módulo por zero ocorre para todos os tipos numéricos. |
| 9 | AssertionError Gerado em caso de falha da declaração Assert. |
| 10 | Erro de atributo Gerado em caso de falha de referência ou atribuição de atributo. |
| 11 | EOFError Gerado quando não há entrada da função raw_input() ou input() e o final do arquivo é atingido. |
| 12 | ImportError Gerado quando uma instrução de importação falha. |
| 13 | Interrupção do teclado Gerado quando o usuário interrompe a execução do programa, geralmente pressionando Ctrl+c. |
| 14 | Erro de pesquisa Classe base para todos os erros de pesquisa. |
| 15 | IndexError Gerado quando um índice não é encontrado em uma sequência. |
| 16 | Erro de chave Gerado quando a chave especificada não é encontrada no dicionário. |
| 17 | NameError Gerado quando um identificador não é encontrado no namespace local ou global. |
| 18 | UnboundLocalError Gerado ao tentar acessar uma variável local em uma função ou método, mas nenhum valor foi atribuído a ela. |
| 19 | EnvironmentError Classe base para todas as exceções que ocorrem fora do ambiente Python. |
| 20 | IOError Gerado quando uma operação de entrada/saída falha, como a instrução print ou a função open() ao tentar abrir um arquivo que não existe. |
| 21 | IOError Gerado para erros relacionados ao sistema operacional. |
| 22 | Erro de sintaxe Gerado quando há um erro na sintaxe do Python. |
| 23 | Erro de recuo Gerado quando o recuo não é especificado corretamente. |
| 24 | SystemError Gerado quando o interpretador encontra um problema interno, mas quando esse erro é encontrado, o interpretador Python não sai. |
| 25 | Sair do sistema Gerado quando o interpretador Python é encerrado usando a função sys.exit(). Se não for tratado no código, faz com que o interpretador saia. |
| 26 | TypeError Gerado quando uma operação ou função é tentada que é inválida para o tipo de dados especificado. |
| 27 | ValueError Gerado quando a função interna de um tipo de dados tem o tipo válido de argumentos, mas os argumentos têm valores inválidos especificados. |
| 28 | RuntimeError Gerado quando um erro gerado não se enquadra em nenhuma categoria. |
| 29 | NotImplementedError Gerado quando um método abstrato que precisa ser implementado em uma classe herdada não é realmente implementado. |
Asserções em Python
Uma asserção é uma verificação de sanidade que você pode ativar ou desativar quando terminar de testar o programa.
A maneira mais fácil de pensar em uma afirmação é compará-la a um raise-if declaração (ou para ser mais preciso, uma declaração raise-if-not). Uma expressão é testada e, se o resultado for falso, uma exceção é gerada.
Asserções são realizadas pela declaração assert, a mais nova palavra-chave do Python, introduzida na versão 1.5.
Os programadores geralmente colocam asserções no início de uma função para verificar a entrada válida e após uma chamada de função para verificar a saída válida.
A afirmação Declaração
Quando encontra uma declaração assert, o Python avalia a expressão que a acompanha, que esperamos ser verdadeira. Se a expressão for falsa, o Python gera um AssertionError exceção.
A sintaxe para assert é -
assert Expression[, Arguments]
Se a asserção falhar, o Python usará ArgumentExpression como argumento para o AssertionError. As exceções AssertionError podem ser capturadas e tratadas como qualquer outra exceção usando a instrução try-except, mas se não forem tratadas, elas encerrarão o programa e produzirão um traceback.
Exemplo
Aqui está uma função que converte uma temperatura de graus Kelvin para graus Fahrenheit. Como zero graus Kelvin é o mais frio possível, a função sai se vê uma temperatura negativa -
Demonstração ao vivo
#!/usr/bin/python def KelvinToFahrenheit(Temperature): assert (Temperature >= 0),"Colder than absolute zero!" return ((Temperature-273)*1.8)+32 print KelvinToFahrenheit(273) print int(KelvinToFahrenheit(505.78)) print KelvinToFahrenheit(-5)
Quando o código acima é executado, ele produz o seguinte resultado -
32.0 451 Traceback (most recent call last): File "test.py", line 9, in <module> print KelvinToFahrenheit(-5) File "test.py", line 4, in KelvinToFahrenheit assert (Temperature >= 0),"Colder than absolute zero!" AssertionError: Colder than absolute zero!
O que é exceção?
Uma exceção é um evento que ocorre durante a execução de um programa que interrompe o fluxo normal das instruções do programa. Em geral, quando um script Python encontra uma situação com a qual não pode lidar, ele gera uma exceção. Uma exceção é um objeto Python que representa um erro.
Quando um script Python gera uma exceção, ele deve tratar a exceção imediatamente, caso contrário, ele será encerrado e encerrado.
Gerenciando uma exceção
Se você tiver algum suspeito código que pode gerar uma exceção, você pode defender seu programa colocando o código suspeito em um try: quadra. Após o bloco try:, inclua um exceto: instrução, seguida por um bloco de código que trata o problema da forma mais elegante possível.
Sintaxe
Aqui está a sintaxe simples de try....except...else blocos -
try: You do your operations here; ...................... except ExceptionI: If there is ExceptionI, then execute this block. except ExceptionII: If there is ExceptionII, then execute this block. ...................... else: If there is no exception then execute this block.
Aqui estão alguns pontos importantes sobre a sintaxe acima mencionada -
-
Uma única instrução try pode ter várias instruções except. Isso é útil quando o bloco try contém instruções que podem lançar diferentes tipos de exceções.
-
Você também pode fornecer uma cláusula except genérica, que trata qualquer exceção.
-
Após a(s) cláusula(s) except, você pode incluir uma cláusula else. O código no bloco else é executado se o código no bloco try:não gerar uma exceção.
-
O bloco else é um bom lugar para código que não precisa da proteção do bloco try:.
Exemplo
Este exemplo abre um arquivo, grava conteúdo no arquivo e sai normalmente porque não há nenhum problema -
Demonstração ao vivo
#!/usr/bin/python
try:
fh = open("testfile", "w")
fh.write("This is my test file for exception handling!!")
except IOError:
print "Error: can\'t find file or read data"
else:
print "Written content in the file successfully"
fh.close()
Isso produz o seguinte resultado -
Written content in the file successfully
Exemplo
Este exemplo tenta abrir um arquivo onde você não tem permissão de gravação, então ele gera uma exceção -
Demonstração ao vivo
#!/usr/bin/python
try:
fh = open("testfile", "r")
fh.write("This is my test file for exception handling!!")
except IOError:
print "Error: can\'t find file or read data"
else:
print "Written content in the file successfully"
Isso produz o seguinte resultado -
Error: can't find file or read data
O exceto Cláusula sem exceções
Você também pode usar a instrução except sem exceções definidas da seguinte forma -
try: You do your operations here; ...................... except: If there is any exception, then execute this block. ...................... else: If there is no exception then execute this block.
Esse tipo de experimentar exceto A instrução captura todas as exceções que ocorrem. Usar esse tipo de instrução try-except não é considerado uma boa prática de programação, pois captura todas as exceções, mas não faz com que o programador identifique a causa raiz do problema que pode ocorrer.
O exceto Cláusula com múltiplas exceções
Você também pode usar o mesmo exceto instrução para lidar com várias exceções da seguinte forma -
try: You do your operations here; ...................... except(Exception1[, Exception2[,...ExceptionN]]]): If there is any exception from the given exception list, then execute this block. ...................... else: If there is no exception then execute this block.
A cláusula try-finally
Você pode usar um finalmente: bloquear junto com um tentar: quadra. O bloco finally é um lugar para colocar qualquer código que deve ser executado, quer o bloco try tenha gerado uma exceção ou não. A sintaxe da instrução try-finally é esta -
try: You do your operations here; ...................... Due to any exception, this may be skipped. finally: This would always be executed. ......................
Você não pode usar mais cláusula, bem como uma cláusula finalmente.
Exemplo
Demonstração ao vivo
#!/usr/bin/python
try:
fh = open("testfile", "w")
fh.write("This is my test file for exception handling!!")
finally:
print "Error: can\'t find file or read data"
Se você não tiver permissão para abrir o arquivo no modo de gravação, isso produzirá o seguinte resultado -
Error: can't find file or read data
O mesmo exemplo pode ser escrito de forma mais limpa da seguinte forma -
Demonstração ao vivo
#!/usr/bin/python
try:
fh = open("testfile", "w")
try:
fh.write("This is my test file for exception handling!!")
finally:
print "Going to close the file"
fh.close()
except IOError:
print "Error: can\'t find file or read data"
Quando uma exceção é lançada no try bloco, a execução passa imediatamente para o finalmente quadra. Depois de todas as declarações no finalmente bloco são executados, a exceção é levantada novamente e é tratada no exceto instruções se estiverem presentes na próxima camada superior do try-except declaração.
Argumento de uma exceção
Uma exceção pode ter um argumento , que é um valor que fornece informações adicionais sobre o problema. O conteúdo do argumento varia por exceção. Você captura o argumento de uma exceção fornecendo uma variável na cláusula except da seguinte forma −
try: You do your operations here; ...................... except ExceptionType, Argument: You can print value of Argument here...
Se você escrever o código para lidar com uma única exceção, poderá fazer com que uma variável siga o nome da exceção na instrução except. Se você estiver interceptando várias exceções, poderá fazer com que uma variável siga a tupla da exceção.
Esta variável recebe o valor da exceção contendo principalmente a causa da exceção. A variável pode receber um único valor ou vários valores na forma de uma tupla. Essa tupla geralmente contém a string do erro, o número do erro e um local do erro.
Exemplo
A seguir está um exemplo para uma única exceção -
Demonstração ao vivo
#!/usr/bin/python
# Define a function here.
def temp_convert(var):
try:
return int(var)
except ValueError, Argument:
print "The argument does not contain numbers\n", Argument
# Call above function here.
temp_convert("xyz");
Isso produz o seguinte resultado -
The argument does not contain numbers invalid literal for int() with base 10: 'xyz'
Criando uma exceção
Você pode gerar exceções de várias maneiras usando a instrução raise. A sintaxe geral para o aumento declaração é a seguinte.
Sintaxe
raise [Exception [, args [, traceback]]]
Aqui, Exceção é o tipo de exceção (por exemplo, NameError) e argumento é um valor para o argumento de exceção. O argumento é opcional; se não for fornecido, o argumento de exceção será Nenhum.
O argumento final, traceback, também é opcional (e raramente usado na prática) e, se presente, é o objeto traceback usado para a exceção.
Exemplo
Uma exceção pode ser uma string, uma classe ou um objeto. A maioria das exceções que o núcleo do Python gera são classes, com um argumento que é uma instância da classe. Definir novas exceções é bastante fácil e pode ser feito da seguinte forma −
def functionName( level ):
if level < 1:
raise "Invalid level!", level
# The code below to this would not be executed
# if we raise the exception
Observação: Para capturar uma exceção, uma cláusula "exceto" deve se referir à mesma exceção lançada, seja objeto de classe ou string simples. Por exemplo, para capturar a exceção acima, devemos escrever a cláusula except da seguinte forma -
try: Business Logic here... except "Invalid level!": Exception handling here... else: Rest of the code here...
Exceções definidas pelo usuário
O Python também permite que você crie suas próprias exceções derivando classes das exceções internas padrão.
Aqui está um exemplo relacionado a RuntimeError . Aqui, uma classe é criada com uma subclasse de RuntimeError . Isso é útil quando você precisa exibir informações mais específicas quando uma exceção é capturada.
No bloco try, a exceção definida pelo usuário é gerada e capturada no bloco except. A variável e é usada para criar uma instância da classe Networkerror .
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
Então, uma vez que você definiu a classe acima, você pode gerar a exceção da seguinte forma -
try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args
python
- Tipos de dados Python
- Operadores Python
- Instrução de passagem do Python
- Argumentos da função Python
- Dicionário Python
- Erros do Python e exceções incorporadas
- Manipulação de Exceções do Python Usando a instrução try, except e finally
- Exceções personalizadas do Python
- Iteradores Python
- Fechamentos Python