Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Python - Manejo de excepciones

Página anteriorPágina siguiente

Python proporciona dos características muy importantes para manejar cualquier error inesperado en sus programas de Python y agregar capacidades de depuración en ellos:

Lista de excepciones estándar −

Sr.No. Nombre y descripción de la excepción
1

Excepción

Clase base para todas las excepciones

2

Detener iteración

Se genera cuando el método next() de un iterador no apunta a ningún objeto.

3

Salida del sistema

Provocado por la función sys.exit().

4

Error estándar

Clase base para todas las excepciones integradas excepto StopIteration y SystemExit.

5

Error aritmético

Clase base para todos los errores que ocurren en el cálculo numérico.

6

Error de desbordamiento

Se genera cuando un cálculo excede el límite máximo para un tipo numérico.

7

Error de punto flotante

Se genera cuando falla un cálculo de coma flotante.

8

Error de división cero

Se genera cuando se realiza la división o el módulo por cero para todos los tipos numéricos.

9

Error de afirmación

Se genera en caso de falla de la declaración Assert.

10

Error de atributo

Se genera en caso de falla en la asignación o referencia de atributo.

11

EOFError

Se genera cuando no hay entrada de la función raw_input() o input() y se alcanza el final del archivo.

12

Error de importación

Se genera cuando falla una declaración de importación.

13

Interrupción de teclado

Se genera cuando el usuario interrumpe la ejecución del programa, generalmente presionando Ctrl+c.

14

Error de búsqueda

Clase base para todos los errores de búsqueda.

15

Error de índice

Se genera cuando no se encuentra un índice en una secuencia.

16

Error de tecla

Se genera cuando la clave especificada no se encuentra en el diccionario.

17

Error de nombre

Se genera cuando no se encuentra un identificador en el espacio de nombres local o global.

18

Error local no enlazado

Se genera cuando se intenta acceder a una variable local en una función o método, pero no se le ha asignado ningún valor.

19

Error de entorno

Clase base para todas las excepciones que ocurren fuera del entorno de Python.

20

IOError

Se genera cuando falla una operación de entrada/salida, como la declaración de impresión o la función open() al intentar abrir un archivo que no existe.

21

IOError

Generado por errores relacionados con el sistema operativo.

22

Error de sintaxis

Se genera cuando hay un error en la sintaxis de Python.

23

Error de sangría

Se genera cuando la sangría no se especifica correctamente.

24

Error del sistema

Se genera cuando el intérprete encuentra un problema interno, pero cuando se encuentra este error, el intérprete de Python no se cierra.

25

Salida del sistema

Se genera cuando se cierra el intérprete de Python mediante la función sys.exit(). Si no se maneja en el código, hace que el intérprete salga.

26

Error de tipo

Se genera cuando se intenta una operación o función que no es válida para el tipo de datos especificado.

27

ValorError

Se genera cuando la función integrada para un tipo de datos tiene el tipo de argumentos válido, pero los argumentos tienen valores no válidos especificados.

28

Error de tiempo de ejecución

Se genera cuando un error generado no pertenece a ninguna categoría.

29

Error no implementado

Se genera cuando un método abstracto que debe implementarse en una clase heredada no se implementa realmente.

Afirmaciones en Python

Una aserción es una verificación de cordura que puede activar o desactivar cuando haya terminado de probar el programa.

La forma más fácil de pensar en una afirmación es compararla con un aumentar si declaración (o para ser más exactos, una declaración de aumento si no). Se prueba una expresión y, si el resultado es falso, se genera una excepción.

Las aserciones se llevan a cabo mediante la declaración de afirmación, la palabra clave más nueva de Python, introducida en la versión 1.5.

Los programadores a menudo colocan afirmaciones al comienzo de una función para verificar una entrada válida y después de una llamada de función para verificar una salida válida.

La afirmación Declaración

Cuando encuentra una declaración de aserción, Python evalúa la expresión que la acompaña, que es de esperar que sea cierta. Si la expresión es falsa, Python genera un AssertionError excepción.

La sintaxis para afirmar es −

assert Expression[, Arguments]

Si la aserción falla, Python usa ArgumentExpression como argumento para AssertionError. Las excepciones AssertionError pueden capturarse y manejarse como cualquier otra excepción usando la declaración try-except, pero si no se manejan, terminarán el programa y producirán un rastreo.

Ejemplo

Aquí hay una función que convierte una temperatura de grados Kelvin a grados Fahrenheit. Dado que cero grados Kelvin es lo más frío posible, la función se recupera si ve una temperatura negativa −

Demostración en 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)

Cuando se ejecuta el código anterior, produce el siguiente 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!

¿Qué es una excepción?

Una excepción es un evento que ocurre durante la ejecución de un programa que interrumpe el flujo normal de las instrucciones del programa. En general, cuando un script de Python se encuentra con una situación que no puede manejar, genera una excepción. Una excepción es un objeto Python que representa un error.

Cuando una secuencia de comandos de Python genera una excepción, debe manejar la excepción de inmediato; de lo contrario, finaliza y se cierra.

Manejar una excepción

Si tiene alguna sospechosa código que puede generar una excepción, puede defender su programa colocando el código sospechoso en un intentar: bloquear. Después del bloque try:, incluya un excepto: declaración, seguida de un bloque de código que maneja el problema de la manera más elegante posible.

Sintaxis

Aquí hay una sintaxis simple de intentar....excepto...else bloques −

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. 

Aquí hay algunos puntos importantes sobre la sintaxis mencionada anteriormente −

Ejemplo

Este ejemplo abre un archivo, escribe contenido en el archivo y sale bien porque no hay ningún problema −

Demostración en 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()

Esto produce el siguiente resultado −

Written content in the file successfully

Ejemplo

Este ejemplo intenta abrir un archivo en el que no tiene permiso de escritura, por lo que genera una excepción:

Demostración en 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"

Esto produce el siguiente resultado −

Error: can't find file or read data

El excepto Cláusula sin excepciones

También puede usar la declaración de excepción sin excepciones definidas de la siguiente manera −

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. 

Este tipo de intentar-excepto La declaración captura todas las excepciones que ocurren. Sin embargo, el uso de este tipo de declaración de excepción de prueba no se considera una buena práctica de programación, ya que detecta todas las excepciones pero no hace que el programador identifique la causa raíz del problema que puede ocurrir.

El excepto Cláusula con Múltiples Excepciones

También puede usar el mismo excepto declaración para manejar múltiples excepciones de la siguiente manera −

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. 

La cláusula de intento final

Puedes usar un finalmente: bloquear junto con un intentar: bloquear. El bloque "finally" es un lugar para colocar cualquier código que deba ejecutarse, ya sea que el bloque "try" genere una excepción o no. La sintaxis de la sentencia try-finally es esta −

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

No puede usar else cláusula junto con una cláusula de finalización.

Ejemplo

Demostración en 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"

Si no tiene permiso para abrir el archivo en modo de escritura, esto producirá el siguiente resultado:

Error: can't find file or read data

El mismo ejemplo se puede escribir más limpiamente de la siguiente manera −

Demostración en 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"

Cuando se lanza una excepción en el intentar bloque, la ejecución pasa inmediatamente a finalmente bloquear. Después de todas las declaraciones en el finalmente se ejecutan, la excepción se genera de nuevo y se maneja en el excepto declaraciones si están presentes en la siguiente capa superior de try-except declaración.

Argumento de una excepción

Una excepción puede tener un argumento , que es un valor que da información adicional sobre el problema. El contenido del argumento varía según la excepción. Captura el argumento de una excepción proporcionando una variable en la cláusula de excepción de la siguiente manera −

try:
   You do your operations here;
   ......................
except ExceptionType, Argument:
   You can print value of Argument here...

Si escribe el código para manejar una única excepción, puede hacer que una variable siga al nombre de la excepción en la declaración de excepción. Si está capturando varias excepciones, puede hacer que una variable siga a la tupla de la excepción.

Esta variable recibe el valor de la excepción que en su mayoría contiene la causa de la excepción. La variable puede recibir un solo valor o múltiples valores en forma de tupla. Esta tupla generalmente contiene la cadena de error, el número de error y una ubicación de error.

Ejemplo

El siguiente es un ejemplo para una sola excepción −

Demostración en 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");

Esto produce el siguiente resultado −

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

Generar excepciones

Puede generar excepciones de varias maneras utilizando la declaración de aumento. La sintaxis general para el raise declaración es la siguiente.

Sintaxis

raise [Exception [, args [, traceback]]]

Aquí, Excepción es el tipo de excepción (por ejemplo, NameError) y argumento es un valor para el argumento de excepción. El argumento es opcional; si no se proporciona, el argumento de excepción es Ninguno.

El argumento final, rastreo, también es opcional (y rara vez se usa en la práctica) y, si está presente, es el objeto de rastreo usado para la excepción.

Ejemplo

Una excepción puede ser una cadena, una clase o un objeto. La mayoría de las excepciones que plantea el núcleo de Python son clases, con un argumento que es una instancia de la clase. Definir nuevas excepciones es bastante fácil y se puede hacer de la siguiente manera −

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

Nota: Para capturar una excepción, una cláusula "excepto" debe hacer referencia a la misma excepción lanzada, ya sea un objeto de clase o una cadena simple. Por ejemplo, para capturar la excepción anterior, debemos escribir la cláusula de excepción de la siguiente manera −

try:
   Business Logic here...
except "Invalid level!":
   Exception handling here...
else:
   Rest of the code here...

Excepciones definidas por el usuario

Python también le permite crear sus propias excepciones derivando clases de las excepciones integradas estándar.

Aquí hay un ejemplo relacionado con RuntimeError . Aquí, se crea una clase que se subclasifica de RuntimeError . Esto es útil cuando necesita mostrar información más específica cuando se detecta una excepción.

En el bloque de prueba, la excepción definida por el usuario se genera y se captura en el bloque de excepción. La variable e se usa para crear una instancia de la clase Networkerror .

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

Entonces, una vez que definió la clase anterior, puede generar la excepción de la siguiente manera −

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print e.args

python

  1. Tipos de datos de Python
  2. Operadores de Python
  3. Declaración de paso de Python
  4. Argumentos de la función de Python
  5. Diccionario de Python
  6. Errores de Python y excepciones integradas
  7. Manejo de excepciones de Python Uso de la instrucción try, except y finalmente
  8. Excepciones personalizadas de Python
  9. Iteradores de Python
  10. Cierres Python
  11. Fecha y hora de Python