NotImplementedError extiende de BaseException. En este post, explicaré de modo simple su comportamiento de forma tal que comprenda como generar una excepción NotImplementedError en Python.
Al extender de BaseException esto significa que es una excepción incorporada y como todas las de su tipo, puede ser generada.
Genere el NotImplementedError así:
from abc import ABC, abstractmethod
class CasaBase(ABC):
@abstractmethod
def color(self):
raise NotImplementedError("Escriba una subclase que implemente el metodo")
class Chalet(CasaBase):
def color(self):
return 'rojo'
class Adosado(CasaBase):
def color(self):
super().color()
chalet = Chalet()
adosado=Adosado()
print (chalet.color())
print(adosado.color()) # esto lanzará una excepcion NotImplementedError: "Escriba subclases que lo implementen”)
Es así de simple; veamos la salida.
rojo
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-11-b400534f9be6> in <module>
18
19 print (chalet.color())
---> 20 print(adosado.color()) # esto lanzará una excepcion NotImplementedError: "Escriba subclases que lo implementen”)
<ipython-input-11-b400534f9be6> in color(self)
12 class Adosado(CasaBase):
13 def color(self):
---> 14 super().color()
15
16 chalet = Chalet()
<ipython-input-11-b400534f9be6> in color(self)
4 @abstractmethod
5 def color(self):
----> 6 raise NotImplementedError("Escriba una subclase que implemente el metodo")
7
8 class Chalet(CasaBase):
NotImplementedError: Escriba una subclase que implemente el metodo
No obstante, esto es útil para generar una excepción, pero es una labor manual, que tomará mucho tiempo implementar en códigos mas largos.
Puede ver mas sobre este error aquí
Entonces, ¿ cómo generar una excepción NotImplementedError en Python?
Si se encuentra con NotImplementedError, la forma recomendada de manejarlo, es implementar el método abstracto para el que se genera el error, directamente.
Debido a que NotImplementedError lo define el usuario, Python no puede generar este error por sí solo; por lo tanto, deberá emplear algún paquete que ya esté utilizando o el propio código que esta escribiendo y luego implementar lo que aun falte.
Veamos un ejemplo.
from abc import ABC, abstractmethod
class CasaBase(ABC):
@abstractmethod
def color(self):
raise NotImplementedError("Escriba una subclase que implemente el metodo")
Ahora se generará el NotImplementedError.
Así que todo lo que necesita hacer para manejar este error, es implementar la función color por una subclase antes de que se use.