Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Python - Tratamento de Exceções

Página anteriorPróxima página
O Python fornece dois recursos muito importantes para lidar com qualquer erro inesperado em seus programas Python e adicionar recursos de depuração neles -

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 -

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

  1. Tipos de dados Python
  2. Operadores Python
  3. Instrução de passagem do Python
  4. Argumentos da função Python
  5. Dicionário Python
  6. Erros do Python e exceções incorporadas
  7. Manipulação de Exceções do Python Usando a instrução try, except e finally
  8. Exceções personalizadas do Python
  9. Iteradores Python
  10. Fechamentos Python