Todas las instancias en Python deben ser instancias de una clase que se derive de BaseException . Dos clases de excepción que no están relacionadas a través de subclases nunca son equivalentes, incluso si tienen el mismo nombre. Las excepciones integradas pueden ser generadas por el intérprete o funciones integradas.
Hay varias excepciones integradas en Python que se generan cuando se producen errores. Estas excepciones integradas se pueden ver usando las funciones integradas local() de la siguiente manera:
>>> locals()['__builtins__']
Esto devuelve un diccionario de excepciones, funciones y atributos incorporados.
Clases base
Las siguientes excepciones se utilizan principalmente como clases base para otras excepciones.
- excepción BaseException
Esta es la clase base para todas las excepciones integradas. No está destinado a ser heredado directamente por clases definidas por el usuario. Para las clases definidas por el usuario, se utiliza Exception. Esta clase es responsable de crear una representación de string de la excepción usando str() usando los argumentos pasados. Se devuelve una string vacía si no hay argumentos.- args : Los args son la tupla de argumentos dados al constructor de excepciones.
- with_traceback(tb) : este método generalmente se usa en el manejo de excepciones. Este método establece tb como el nuevo rastreo para la excepción y devuelve el objeto de excepción.
Código:
try: ... except SomeException: tb = sys.exc_info()[2] raise OtherException(...).with_traceback(tb)
- excepción Excepción
Esta es la clase base para todas las excepciones integradas que no salen del sistema. Todas las excepciones definidas por el usuario también deben derivarse de esta clase. - excepción ArithmeticError
Esta clase es la clase base para las excepciones integradas que se generan para varios errores aritméticos como:- OverflowError
- Error de división cero
- Error de punto flotante
Ejemplo :
try
:
a
=
10
/
0
print
(a)
except
ArithmeticError:
print
(
"This statement is raising an arithmetic exception."
)
else
:
print
(
"Success."
)
Producción :
This statement is raising an arithmetic exception.
- excepción BufferError
Esta excepción se genera cuando no se pueden realizar operaciones relacionadas con el búfer. - excepción LookupError
Esta es la clase base para aquellas excepciones que se generan cuando una clave o índice utilizado en un mapeo o secuencia no es válido o no se encuentra. Las excepciones planteadas son:- Error de clave
- IndexError
Ejemplo :
try
:
a
=
[
1
,
2
,
3
]
print
(a[
3
])
except
LookupError:
print
(
"Index out of bound error."
)
else
:
print
(
"Success"
)
Producción :
Index out of bound error.
Excepciones concretas
Las siguientes excepciones son las excepciones que generalmente se plantean.
- excepción AssertionError
Se genera un AssertionError cuando falla una declaración de afirmación.Ejemplo :
assert False, 'The assertion failed'
Producción :
Traceback (most recent call last): File "exceptions_AssertionError.py", line 12, in assert False, 'The assertion failed' AssertionError: The assertion failed
- excepción AttributeError
Se genera un AttributeError cuando falla una referencia o asignación de atributo, como cuando se hace referencia a un atributo inexistente.Ejemplo :
class
Attributes(
object
):
pass
object
=
Attributes()
print
(
object
.attribute)
Producción :
Traceback (most recent call last): File "d912bae549a2b42953bc62da114ae7a7.py", line 5, in print object.attribute AttributeError: 'Attributes' object has no attribute 'attribute'
- excepción EOFError
Se genera un EOFError cuando funciones integradas como input() alcanzan una condición de fin de archivo (EOF) sin leer ningún dato. Los métodos de archivo como readline() devuelven una string vacía cuando llegan a EOF.Ejemplo :
while
True
:
data
=
input
(
'Enter name : '
)
print
(
'Hello '
, data)
Producción :
Enter Name :Hello Aditi Enter Name :Traceback (most recent call last): File "exceptions_EOFError.py", line 13, in data = raw_input('Enter name :') EOFError: EOF when reading a line
- excepción FloatingPointError
Se genera un FloatingPointError cuando falla una operación de coma flotante. Esta excepción siempre se define, pero solo se puede generar cuando Python está configurado con la opción –with-fpectl, o el símbolo WANT_SIGFPE_HANDLER está definido en el archivo pyconfig.h.Ejemplo :
import
math
print
(math.exp(
1000
))
Producción :
Traceback (most recent call last): File "", line 1, in FloatingPointError: in math_1
- excepción GeneratorExit
Esta excepción hereda directamente de BaseException en lugar de Exception ya que técnicamente no es un error. Se genera una excepción GeneratorExit cuando se cierra un generador o una corrutina.Ejemplo :
def
my_generator():
try
:
for
i
in
range
(
5
):
print
(
'Yielding'
, i)
yield
i
except
GeneratorExit:
print
(
'Exiting early'
)
g
=
my_generator()
print
(g.
next
())
g.close()
Producción :
Yielding 0 0 Exiting early
- excepción ImportError
Se genera un ImportError cuando la declaración de importación no puede cargar un módulo o cuando la «lista de origen» en la importación de… tiene un nombre que no se puede encontrar.Ejemplo :
import
module_does_not_exist
Producción :
Traceback (most recent call last): File "exceptions_ImportError_nomodule.py", line 12, in import module_does_not_exist ImportError: No module named module_does_not_exist
Ejemplo :
from
exceptions
import
Userexception
Producción :
Traceback (most recent call last): File "exceptions_ImportError_missingname.py", line 12, in from exceptions import Userexception ImportError: cannot import name Userexception
- excepción ModuleNotFoundError
Esta es la subclase de ImportError que se genera al importar cuando no se pudo encontrar un módulo. También se genera cuando se encuentra Ninguno en sys.modules. - excepción IndexError
Se genera un IndexError cuando se hace referencia a una secuencia que está fuera de rango.Ejemplo :
array
=
[
0
,
1
,
2
]
print
(array[
3
])
Producción :
Traceback (most recent call last): File "exceptions_IndexError.py", line 13, in print array[3] IndexError: list index out of range
- excepción KeyError
Se genera un KeyError cuando no se encuentra una clave de asignación en el conjunto de claves existentes.Ejemplo :
array
=
{
'a'
:
1
,
'b'
:
2
}
print
(array[
'c'
])
Producción :
Traceback (most recent call last): File "exceptions_KeyError.py", line 13, in print array['c'] KeyError: 'c'
- excepción KeyboardInterrupt
Este error se genera cuando el usuario presiona la tecla de interrupción, como Control-C o Eliminar.Ejemplo :
try
:
print
(
'Press Return or Ctrl-C:'
,)
ignored
=
input
()
except
Exception, err:
print
(
'Caught exception:'
, err)
except
KeyboardInterrupt, err:
print
(
'Caught KeyboardInterrupt'
)
else
:
print
(
'No exception'
)
Producción :
Press Return or Ctrl-C: ^CCaught KeyboardInterrupt
- excepción MemoryError
Este error se genera cuando una operación se queda sin memoria.Ejemplo :
def
fact(a):
factors
=
[]
for
i
in
range
(
1
, a
+
1
):
if
a
%
i
=
=
0
:
factors.append(i)
return
factors
num
=
600851475143
print
(fact(num))
Producción :
Traceback (most recent call last): File "4af5c316c749aff128df20714536b8f3.py", line 9, in print fact(num) File "4af5c316c749aff128df20714536b8f3.py", line 3, in fact for i in range(1, a+1): MemoryError
- excepción NameError
Este error se genera cuando no se encuentra un nombre local o global. Por ejemplo, un nombre de variable no calificado.Ejemplo :
def
func():
print
ans
func()
Producción :
Traceback (most recent call last): File "cfba0a5196b05397e0a23b1b5b8c7e19.py", line 4, in func() File "cfba0a5196b05397e0a23b1b5b8c7e19.py", line 2, in func print ans NameError: global name 'ans' is not defined
- excepción NotImplementedError
Esta excepción se deriva de RuntimeError. Los métodos abstractos en clases definidas por el usuario deben generar esta excepción cuando las clases derivadas anulan el método.Ejemplo :
class
BaseClass(
object
):
"""Defines the interface"""
def
__init__(
self
):
super
(BaseClass,
self
).__init__()
def
do_something(
self
):
"""The interface, not implemented"""
raise
NotImplementedError(
self
.__class__.__name__
+
'.do_something'
)
class
SubClass(BaseClass):
"""Implements the interface"""
def
do_something(
self
):
"""really does something"""
print
(
self
.__class__.__name__
+
' doing something!'
)
SubClass().do_something()
BaseClass().do_something()
Producción :
Traceback (most recent call last): File "b32fc445850cbc23cd2f081ba1c1d60b.py", line 16, in BaseClass().do_something() File "b32fc445850cbc23cd2f081ba1c1d60b.py", line 7, in do_something raise NotImplementedError(self.__class__.__name__ + '.do_something') NotImplementedError: BaseClass.do_something
- excepción OSError([arg])
La excepción OSError se genera cuando una función del sistema devuelve un error relacionado con el sistema, incluidas fallas de E/S como errores de «archivo no encontrado» o «disco lleno».Ejemplo :
def
func():
print
(ans)
func()
Producción :
Traceback (most recent call last): File "442eccd7535a2704adbe372cb731fc0f.py", line 4, in print i, os.ttyname(i) OSError: [Errno 25] Inappropriate ioctl for device
- excepción OverflowError
OverflowError se genera cuando el resultado de una operación aritmética está fuera de rango. Los enteros generan MemoryError en lugar de OverflowError. OverflowError a veces se genera para números enteros que están fuera de un rango requerido. Las operaciones de coma flotante no se verifican debido a la falta de estandarización del manejo de excepciones de coma flotante en C.Ejemplo :
import
sys
print
(
'Regular integer: (maxint=%s)'
%
sys.maxint)
try
:
i
=
sys.maxint
*
3
print
(
'No overflow for '
,
type
(i),
'i ='
, i)
except
OverflowError, err:
print
(
'Overflowed at '
, i, err)
print
()
print
(
'Long integer:'
)
for
i
in
range
(
0
,
100
,
10
):
print
(
'%2d'
%
i,
2L
*
*
i)
print
()
print
(
'Floating point values:'
)
try
:
f
=
2.0
*
*
i
for
i
in
range
(
100
):
print
(i, f)
f
=
f
*
*
2
except
OverflowError, err:
print
(
'Overflowed after '
, f, err)
Producción :
Regular integer: (maxint=9223372036854775807) No overflow for i = 27670116110564327421 Long integer: 0 1 10 1024 20 1048576 30 1073741824 40 1099511627776 50 1125899906842624 60 1152921504606846976 70 1180591620717411303424 80 1208925819614629174706176 90 1237940039285380274899124224 Floating point values: 0 1.23794003929e+27 1 1.53249554087e+54 2 2.34854258277e+108 3 5.5156522631e+216 Overflowed after 5.5156522631e+216 (34, 'Numerical result out of range')
- excepción RecursionError
RecursionError se deriva de RuntimeError. Esta excepción se genera cuando el intérprete detecta que se excede la profundidad de recursión máxima. - excepción ReferenceError
El ReferenceError se genera cuando se utiliza un proxy de referencia débil para acceder a un atributo del referente después de la recolección de elementos no utilizados.Ejemplo :
import
gc
import
weakref
class
Foo(
object
):
def
__init__(
self
, name):
self
.name
=
name
def
__del__(
self
):
print
(
'(Deleting %s)'
%
self
)
obj
=
Foo(
'obj'
)
p
=
weakref.proxy(obj)
print
(
'BEFORE:'
, p.name)
obj
=
None
print
(
'AFTER:'
, p.name)
Producción :
BEFORE: obj (Deleting ) AFTER: Traceback (most recent call last): File "49d0c29d8fe607b862c02f4e1cb6c756.py", line 17, in print 'AFTER:', p.name ReferenceError: weakly-referenced object no longer exists
- excepción RuntimeError
RuntimeError se genera cuando no se aplica ninguna otra excepción. Devuelve una string que indica qué fue exactamente lo que salió mal. - excepción StopIteration
El error StopIteration lo genera la función integrada next() y el método __next__() de un iterador para señalar que el iterador produce todos los elementos.Ejemplo :
Arr
=
[
3
,
1
,
2
]
i
=
iter
(Arr)
print
(i)
print
(i.
next
())
print
(i.
next
())
print
(i.
next
())
print
(i.
next
())
Producción :
3 1 2 Traceback (most recent call last): File "2136fa9a620e14f8436bb60d5395cc5b.py", line 8, in print i.next() StopIteration
- excepción SyntaxError
SyntaxError se genera cuando el analizador encuentra un error de sintaxis. Puede ocurrir un error de sintaxis en una declaración de importación o al llamar a las funciones integradas exec() o eval(), o al leer el script inicial o la entrada estándar.Ejemplo :
try
:
print
(
eval
(
'geeks for geeks'
))
except
SyntaxError, err:
print
(
'Syntax error %s (%s-%s): %s'
%
\
(err.filename, err.lineno, err.offset, err.text))
print
(err)
Producción :
Syntax error (1-9): geeks for geeks invalid syntax (, line 1)
- excepción SystemError
El SystemError se genera cuando el intérprete encuentra un error interno. El valor asociado es una string que indica qué salió mal. - excepción SystemExit
SystemExit se genera cuando se llama a la función sys.exit(). Una llamada a sys.exit() se traduce en una excepción para ejecutar controladores de limpieza (finally cláusulas de sentencias try) y para depurar un script sin correr el riesgo de perder el control. - excepción TypeError
TypeError se genera cuando se aplica una operación o función a un objeto de tipo inapropiado. Esta excepción devuelve una string que brinda detalles sobre la discrepancia de tipos.Ejemplo :
arr
=
(
'tuple'
, )
+
'string'
print
(arr)
Producción :
Traceback (most recent call last): File "30238c120c0868eba7e13a06c0b1b1e4.py", line 1, in arr = ('tuple', ) + 'string' TypeError: can only concatenate tuple (not "str") to tuple
- excepción UnboundLocalError
UnboundLocalError es una subclase de NameError que se genera cuando se hace una referencia a una variable local en una función o método, pero no se ha asignado ningún valor a esa variable.Ejemplo :
def
global_name_error():
print
(unknown_global_name)
def
unbound_local():
local_val
=
local_val
+
1
print
(local_val)
try
:
global_name_error()
except
NameError, err:
print
(
'Global name error:'
, err)
try
:
unbound_local()
except
UnboundLocalError, err:
print
(
'Local name error:'
, err)
Producción :
Global name error: global name 'unknown_global_name' is not defined Local name error: local variable 'local_val' referenced before assignment
- excepción UnicodeError
Esta excepción es una subclase de ValueError. UnicodeError se genera cuando se produce un error de codificación o decodificación relacionado con Unicode. - excepción ValueError
Se genera un ValueError cuando una operación o función integrada recibe un argumento que tiene el tipo correcto pero un valor no válido.Ejemplo :
print
(
int
(
'a'
))
Producción :
Traceback (most recent call last): File "44f00efda935715a3c5468d899080381.py", line 1, in print int('a') ValueError: invalid literal for int() with base 10: 'a'
- excepción ZeroDivisionError
Se genera un ZeroDivisionError cuando el segundo argumento de una operación de división o módulo es cero. Esta excepción devuelve una string que indica el tipo de los operandos y la operación.Ejemplo :
print
(
1
/
0
)
Producción :
Traceback (most recent call last): File "c31d9626b41e53d170a78eac7d98cb85.py", line 1, in print 1/0 ZeroDivisionError: integer division or modulo by zero
Este artículo es una contribución de Aditi Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA