KeyError en Python

python error

En este post analizaremos cómo se origina  el KeyError, en Python y como surge esta excepción.

El KeyError se genera, cuando se accede a una clave (key) no válida dentro de un diccionario (dict).

Veamos primero la jerarquía general de  las Exceptions Class  de Python.

Resumiendo

Todas las excepciones de Python heredan de la clase BaseException o se extienden desde una clase heredada en la misma.

La jerarquía de excepciones completa de este error es:

BaseException

¿Cuándo debería usarlo?

Dado que IndexError trata con listas y KeyError trata con dictados, deberíamos explorar brevemente la diferencia entre estas dos estructuras de datos comunes en Python. Las listas de Python son similares a las matrices en la mayoría de los otros lenguajes de programación. Es una colección ordenada de objetos que se asignan en un índice numérico incremental para identificar cada elemento.

Las listas se usan comúnmente como pilas, lo que permite el comportamiento de «primero en entrar, último en salir».

Los dictados, por otro lado, se conocen como matrices asociativas en la mayoría de los otros lenguajes. Un dictado también es una colección de objetos, pero no está ordenado, y en lugar de usar índices numéricos, un dictado usa tipos de datos inmutables como claves.

Ahora te será fácil entender que siempre que veas una referencia a los pares clave: valor en Python, esto es una indicación de que la colección que contiene esos pares es un dict o diccionario.

La comprensión del error es muy simple, si creamos un diccionario e intentamos acceder a una clave que no existe, se generará un KeyError

Manejar la excepción Index Error: Index Out of Range

python error

Hablemos de cómo manejar una excepción Index Error: Index Out of Range en Python

Una solución para manejar este error de modo inesperado y prevenir que sea lanzado, es emplear un bloque try-except para encontrarlo y controlarlo.

La idea es que si ocurre una excepción durante la ejecución de nuestro codigo, la excepción quedará atrapada en el bloque except.

Ejemplo

Import sys
Try:
list =(‘a’,2,3,5,6,’b’,8)

print(lista[8])
except IndexError as e:
print(e)
print(sys.exc_info())

Una vez en este punto podrás manejar el error y lo que nos imprime.

…. no recuerdo ya el lugar de donde vengo y pueda que no exista el sitio adonde voy..

J. Sabina

Resultado incorrecto al dividir números grandes en Python3.

python error

Si te ha sucedido ya, te explico porque obtienes un resultado incorrecto al dividir números grandes en Python 3.

 Es cierto que Python 3 da errores en el resultado cuando divides dos números muy largos, empleando el símbolo /.

Esto se debe a que en Python 3.x  el símbolo / significa división de punto flotante y con números muy grandes, puede dar pequeños errores de redondeo.

Lo correcto es usar // para  la división de enteros.

Por ejemplo:

d = a // (b*c)

Espero haber ayudado a alguien.

Muchas gracias

El que siempre soñó, tiene derecho a ganar

I.Delgado

Index Error: Index Out of Range en Python

python error

El error en Python, Index Error: Index Out of Range, extiende de la clase LookupError, que se hereda de la BaseException, que viene predefinida en el lenguaje.

Dentro de la clase LookupError, se enumeran dos errores:

BaseException
  LookupError
    IndexError
      KeyError

¿Qué significa el error de Python, Index Error: Index Out of Range?

Como Python admite la indexación de elementos de lista, esta preparado para acceder a elementos iterables y operar con ellos, realizando acciones como imprimir o recorrer elementos.

El problema viene cuando se menciona un índice en su código que está fuera del rango de la lista, entonces  Python arrojará un IndexError que le indicará que el índice de la lista está fuera del rango.

Por ejemplo cuando intentamos acceder a un elemento usando un índice que está fuera del rango de esa lista, recibirá un error de  Index Error: Index Out of Range.

En en el siguiente caso, imprimir la posición (lista [8]) se refiere a una posición que no existe que no existe, ya que la primera posición de cualquier arreglo es 0, por tanto si la lista tiene 7 registros, la posición más alta es [6]

lista = (‘a’,2,3,5,6,’b’,8)
print(lista[8])

Si estas recibiendo este error basta con que te asegures que estas pidiendo una posición dentro del rango correcto.

Puedes ver mas como manejar este error aquí

…., si avanzo sígueme, si me detengo empújame, si retrocedo mátame…….

F. País

FileNotFoundError: [Errno 2] No such file or directory

python error

El error  FileNotFoundError: [Errno 2] No such file or directory, es un error común que lanza la librería OS.

En esencia este error indica que estámos intentando acceder a un archivo o carpeta que no existe, ya sea porque no está presente en la ruta de archivo en particular o porque se ha cambiado su nombre.

Normalmente verá un IOError si intenta leer o escribir en un archivo que no existe usando una instrucción open () del tipo

f = open ('nombre de archivo.txt')

Para corregirlo lo primero es  comprobar de antemano, que se está refiriendo al archivo o carpeta correcto.

Un error común es que corramos

python script.py

Cuando deberíamos llamar a la ruta correcta de esta forma

python. / script.py

Ver otros errores en Python en mi blog

Otro error que puede darse es que nuestro archivo comience con la letra n, y se confunda con una secuencia de escape; podría pasar algo asi:

path_name = "C:\name.txt " 

En este caso Python considerará \n como una secuencia de escape y nunca encontrará el archivo name.txt

Capturar el error [Errno 2] No such file or directory

Podemos capturar el error para emplearlo a conveniencia. Veamos aca algunas variantes, donde si el archivo no es encontrado manejaremos un mensaje de salida

Os

import os

path_name = "filename.txt"

if os.path.isfile(path_name):
   print("File exists")
f = open(path_name)
#Ejecutar aquí otras operaciones
f.close()

else :
   print("El archivo no existe, se encontró un error tipo IOError ")

Pathlib

from pathlib
import Path
path_name = "filename.txt"
p = Path(path_name)
if p.is_file():
   print("File exists")
f = open(path_name)
#Ejecutar aquí otras operaciones
f.close()

else :
   print("El archivo no existe, se encontró un error tipo IOError ")

Try – Except primera variante

try:
f = open("filename.txt")
#Execute other operations
f.close()
except IOError as io:
   print(io)

Try – Except segunda variante

try:
f = open("filename.txt")
#Ejecutar aquí otras operaciones
f.close()
except IOError:
   print("El archivo no existe, se encontró un error tipo IOError ")

Y hasta aquí. Espero que este post ayude a alguien.

Muchas gracias

La ira no tiene alas y es tímida, la estupidez en cambio es desenvuelta y aventurera. Por  eso volcamos nuestra ira en los que nos quieren, y nos esforzamos por complacer , a los que no importamos nada.

Y

Manejar el ValueError en Python

python error

La mejor manera de encontrar y manejar ValueError en Python, como una excepción es empleando un bloque try-except.

Coloque su declaración entre las palabras clave try y except.

Puede ver más sobre la causa de este error aquí

Si ocurre una excepción durante la ejecución, aparecerá la cláusula except que codificó.

Sería algo así:

try:
    numero = 7
    lista = []
    lista.remove(numero)
except ValueError:
	print('la lista esta vacía')

Salida


la lista esta vacía

Una vez configurado el bloque try-except, será obvio dónde está la excepción en su código.

Espero haber ayudado a alguien.

Tengo un principio y un fin, pero a veces no distingo cual es cada uno

N. Se

AttributeError: module argparse has no attribute ArgumentParser

python error

Es posible que en algún momento, hayas recibido el error: AttributeError: module argparse has no attribute ArgumentParser, al intentar importar el modulo argparser() de Python.

Bien, la causa podría ser que  has nombrado como el nombre argparse a algún archivo, o carpeta en el entorno donde estas desarrollando, y por tanto Python intentará importar primero a este archivo,  antes que a otros.

Puede ser incluso, que el archivo que se llama argparse, sea el mismo sobre el que  estas desarrollando.

Otros artículos sobre Python

Esto arrojará el ya mencionado error, porque simplemente el archivo que buscas no es  ese.

La solución como ya imaginas, es renombrar tu archivo con otro nombre, que no invite a la confusión.

Puedes ver mas sobre argparse(), en este link.

Tres cosas necesitan las ovejas para andar en manadas, el miedo al perro, la voz de amo y que la de atrás empuje por miedo a quedarse sola.

Y.

Cómo generar una excepción NotImplementedError en Python

python error

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.

NotImplementedError en Python

python error

Según su documentación, el NotImplementedError en Python ocurre, cuando un método abstracto carece de la clase derivada requerida, para anularlo, lo que genera esta excepción.

Analicemos esto un poco.

Si bien no proporciona clases abstractas, Python permite usar el módulo, Abstract Base Classes (ABC).

Las clases abstractas son útiles porque crean escenarios para otras clases y establecen  al mismo tiempo, un conjunto de métodos.

from abc import ABC, abstractmethod

class CasaBase(ABC):

	@abstractmethod
	def color(self):
		raise NotImplementedError("Escriba  una subclase que implemente el metodo")

Una clase base abstracta, incluye uno o más métodos abstractos (entiéndase, métodos que han sido declarados, pero carecen de implementación).

Las subclases, o clases secundarias, son necesarias para implementar estos métodos abstractos.

Por tanto, si usted recibe un NotImplementedError en Python esto se deberá a una de estas razones:

1. No ha creado una clase derivada, que anule el método abstracto

2. No ha implementado la clase.

Puede ver aquí como generar una excepción del error NotImplementedError

El amor siempre empieza soñando y termina en insomnio

R. Arjona

TypeError: static() got an unexpected keyword argument ‘document_root’ in Django»

django error

El error typeError: static() got an unexpected keyword argument ‘document_root, puede aparecer, en Django cuando intentamos añadir en nuestro urls.py

+= static(settings.MEDIA_URL, documnet_root=settings.MEDIA_ROOT)

Esta modificación de las urls, la hacemos para decirle a Django, en qué lugar se encuentran nuestros archivos media.

Si nos fijamos en el contenido de nuestro archivo settings.py, debe aparecer la dirección que indica , dónde guardamos nuestros archivos estáticos y en que lugar nuestros archivos tipo media.

Es algo asi

MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'media')
 STATIC_URL = '/static/' 

Dicho esto, el error ‘TypeError: static() got an unexpected keyword argument ‘document_root‘ puede proceder de diversas fuentes, dos de las que conozco y me resultan más comunes son:

 Importar de modo incorrecto la ruta del método static utilizando:

 from django.templatetags.static import static

cuando deberiamos importar

 from django.conf.urls.static import static   

El primero de ellos nos permite manejar archivos estáticos, como css, javascript o imágenes.

El segundo  es una una función helper que nos devuelve la  url,  donde se encuentra un contenido especifico  y su estructura es:

static.static(prefixview=django.views.static.serve**kwargs)

import *

Si, así es. El segundo error es emplear el uso de import *, que por más que pueda parecer cómodo , me ha traído algún de un dolor de cabeza.

En este articulo pueden ampliar conocimiento sobre sus inconvenientes.

“….El amor siempre empieza soñando y termina en insomnio“

R.Arjona

Translate »