ValueError en Python

python error

El ValueError en Python es una muestra de su flexibilidad.  

Python es lo suficientemente inteligente como para saber cuándo el código intenta asignar un valor incorrecto a un objeto.

Y es ahí es cuando lanzará su error ValueError que deberemos manejar.

En este post intentare explicar cual es su causa y su razón de ser.

Todas las excepciones de Python heredan de la clase BaseExceptions.

Dentro de la clase ValueError, también notará algunas otras excepciones.

La estructura jerárquica es esta.

BaseExceptions -> Exception -> ValueError -> UnicodeError -> UnicodeDecodeError -> UnicodeEncodeError -> UnicodeTranslateError

¿Qué es  el ValueError en Python Python?

Un ValueError en Python es aquel que se lanza cuando se asigna un valor incorrecto a un objeto.

numero = 7
lista = []
list.remove(numero)

Causas del ValueError en Python en Python.

Cuando tienes el mismo tipo de objeto, pero el valor incorrecto, Python rechaza el código.

Una equivocación común es confundir un ValueError con un TypeError.

A diferencia de ValueError, se lanzará un TypeError cuando se realiza una operación que utiliza un tipo de objeto incorrecto o no admitido.

O sea es una diferencia de tipo de objeto, no de su valor.

Aplicandolo a la vida real, si tienes un auto e intentas ponerle 5 neumaticos este es un error de valor, o sea un ValueError, por el valor de los neumáticos será como máximo 5.

Si por el contrario tuvieras un auto e intentaras meterlo en una bolsa de viaje, es una ejemplo de TypeError, porque además de que no cabe, el tipo de objeto que corresponde no es  ese.

Si ves una ventana que indica un ValueError en Python analiza tu código, buscando una de esas causas.

  • Intentas realizar una operación cuando no existe un valor
  • Tratas de extraer más valores de los que tiene un objeto
  • El valor  que esperas obtener es imposible (por ejemplo, si intentas obtener  la raíz de un número negativo).

Espero haber ayudado.

El amor tiene firma de autor, en las causas perdidas

R. Arjona

AttributeError en Python

python error

El AttributeError, es un error común que aparece en Python por algunas razones que veremos a continuación.

La más común de ellas, es que obtengas este error, debido a qué has empleado una sangría errónea, como por ejemplo mezclar tabulaciones y espacios.

La otra causa que conozco, en Python 3+, es que esto ocurra si usas variables privadas que comienzan con doble subrayado.

Puedes leer sobre otros errores de Python en mi blog.

El aire hincha la vela, pero la deshilacha, y hay tantas velas rotas en el fondo del mar.

J.A. Buesa

Errores en Python

python error

En Python se dan dos tipos de errores principales. Los errores de sintaxis  y las excepciones

Los errores de sintaxis o interpretación, son muy comunes.

Su estructura suele ser la que aparece en el ejemplo siguiente:

>>> while True print('Hello world')
  File "<stdin>", line 1
    while True print('Hello world')
                   ^
SyntaxError: invalid syntax

En este caso el intérprete de Python, reproduce la línea responsable del error y muestra una “flecha” que apunta al primer lugar donde se detectó este.

En el ejemplo, el error se detecta en la función print(), ya que faltan dos puntos (‘:’) antes del mismo.

El error ha sido provocado (o al menos detectado) en el elemento que precede a la flecha. Dentro de la declaración del error se muestran el nombre del archivo y el número de línea, lo cual te permitirá localizar con facilidad su ubicación exacta.  

Excepciones

Se llama excepciones a errores detectados durante la ejecución del código que no son incondicionalmente fatales.

Esto quiere decir que pueden ser resueltos con una condición y por ello Python nos ofrece condiciones para manejarlos.

Cuando no son gestionadas por el código, resultan en en mensajes de error:

Veamos algunos ejemplos.

>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

Explicando un poco el ejemplo vemos que estrutura tiene.

En Python existen diferentes tipos de excepciones y el tipo a que corresponde se imprime como parte del mensaje.

En el ejemplo los tipos son: ZeroDivisionErrorNameError y TypeError.

La cadena mostrada como tipo de la excepción es el nombre de la excepción predefinida que ha ocurrido.

Esta convención es válida para todas las excepciones predefinidas del intérprete, y aunque no tiene por que ser así para excepciones definidas por el usuario, se recomienda su uso.

La parte anterior del mensaje de error muestra el contexto donde ocurrió la excepción, en forma de seguimiento de pila.

En general, contiene un seguimiento de pila que enumera las líneas de origen; sin embargo, no mostrará las líneas leídas desde la entrada estándar.

El resto del mensaje provee información basado en el tipo de la excepción y qué la causó.

La última línea de los mensajes de error indica qué ha sucedido.

Por último debemos saber que los nombres de las excepciones estándar son identificadores incorporados al intérprete (no son palabras clave reservadas).

En otro articulo hablare de como capturar las excepciones

Error _io.TextIOWrapper

python error

Hablemos del mensaje de error _io.TextIOWrapper, que suele aparecer cuando intentamos imprimir un determinado archivo en Python.

Realmente aunque lo consideramos un error no lo es, sino que es mas bien un mensaje que nos indica que estamos intentando imprimir algo que no es correcto.

Veamos un ejemplo de como debería estar planteado nuestro código:

def  imprimir():
    #Abrimos el archive para imprimir.txt.
    nuevo_file = open('imprimir.txt', 'r')

    #lo leemos
    contenido = nuevo_file.read()

    #Imprimimos los datos dentro del objeto contenido
    print(contenido)

Revisa bien los elementos del código y recuerda que en Python todo, son objetos a los cuales les vamos aplicando funciones, cuyo tipo no necesita ser definido de antemano y que pueden variar su contenido.

Espero modestamente, que este post, sirva de ayuda  a alguien.

La turba enardecida se convierte en manada, y la manada mata.

Y.

Error IsADirectoryError

python error

IsADirectoryError  es un  tipo de error que puede aparecer en Python, cuando intentamos acceder a un archivo de forma errónea.

El error suele tener esta forma:

Traceback (most recent call last):
  File "miprograma.py", line 38, in <module>
    archivo()
  File "miprograma.py", line 28, in archivo
    descarga = open('/Volumes/MasterData/tiendas/informatica/tienda01/descargas', 'wb').write(miarchivo.content)
IsADirectoryError: [Errno 21] Is a directory: '/Volumes/MasterData/tiendas/informatica/tienda01/descargas'

Como puede verse, lo que sucede es que hemos escrito mal la ruta y en vez de dirigirla la petición hacia un archivo, la estamos dirigiendo a una carpeta.

Esto puede suceder cuando copiamos y pegamos, generalmente porque no hemos escrito el nombre del archivo.

Otros post sobre errores en Python

Espero modestamente, que este post haya ayudado a alguien.

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

Y.

Manejar excepciones en Python

python error

Si lo que necesitas es manejar excepciones en Python, para adecuar tu código a determinada exigencias, el lenguaje nos da suficientes herramientas para ello.

En este ejemplo que hemos tomado de aquí , se le pide al usuario una entrada hasta que ingrese un entero válido; sin embargo también se le permite un modo de interrumpir el programa la ejecución del programa, usando Control-C.

Esta interrupción se recoge generando la excepción KeyboardInterrupt.

>>> while True:
...     try:
...         x = int(input("Please enter a number: "))
...         break
...     except ValueError:
...         print("Oops!  That was no valid number.  Try again...")
...

Las excepciones se manejan con las sentencias try y except

Manejar las excepciones

La sentencia try funciona de la siguiente manera.

  • Primero, se ejecuta la cláusula try  que ejecuta el código que exista entre entre las palabras reservadas try y  except).
  • Si no ocurre ninguna excepción, la cláusula except() se omite y la ejecución de la cláusula try finaliza.
  • Si una excepción ocurre durante la ejecución de try, el resto de la clausula se salta.
  • En ese caso si su tipo coincide con la excepción nombrada después de la palabra clave except, se ejecuta la cláusula except, y luego la ejecución continúa después del bloque try / except.

Si la excepción que ocurre no coincide con la excepción nombrada en la cláusula except,  se pasa a ejecutar las sentencias try externas; y si no se encontraran, entonces el interprete considerará excepción como una excepcion no controlada y  detendrá la ejecución, lanzando un mensaje como el que aparece en el ejemplo.  

Una declaración try() puede tener más de una cláusula except, para especificar manejadores para diferentes excepciones que corresponden a un mismo try().

No obstante, como máximo, se ejecutará un controlador.

Los manejadores solo manejan las excepciones que ocurren en la cláusula try correspondiente.

Una cláusula except puede nombrar múltiples excepciones, empleando  una tupla entre paréntesis, por ejemplo:

... except (RuntimeError, TypeError, NameError):
...     pass

Si declaramos una clase en una cláusula except esta será  compatible con una excepción, si es la misma clase o una clase base de la misma.

Esto no funciona al revés, o sea  una cláusula except que enumera una clase derivada no es compatible con una clase base.

Por ejemplo, el siguiente código imprimirá B, C, D en ese orden:

class B(Exception):
    pass

class C(B):
    pass

class D(C):
    pass

for cls in [B, C, D]:
    try:
        raise cls()
    except D:
        print("D")
    except C:
        print("C")
    except B:
        print("B")

Si invirtiéramos las cláusulas, colocando except B primero, obtendríamos como resultado B,B,B, ya que una vez que el bucle alcanza el primera coincidencia se lanza la excepción.

Todas las excepciones heredan de BaseException,  de modo que puede emplearse como comodín.

No obstante dado que las excepciones pueden enmascar un error de programación real , es recomendable emplearlo con cuidado.

La instrucción try ... except tiene una cláusula else opcional, que, cuando está presente, seguir a las cláusulas except.

Es útil para el código que debe ejecutarse si la cláusula try no genera una excepción. Por ejemplo:

De este modo else() evita capturar accidentalmente una excepción que no fue generada por el código que está protegido por la declaración try … except.

Cuando ocurre una excepción, puede tener un valor asociado, también conocido como el argumento de la excepción. La presencia y el tipo de argumento depende del tipo de excepción.

La cláusula except puede especificar una variable después del nombre de la excepción.

Dicha variable está vinculada a una instancia de excepción con los argumentos almacenados en instance.args.

Por conveniencia, la instancia de excepción define __str __ () para que los argumentos se puedan imprimir directamente sin tener que hacer referencia a .args.

También se puede crear una instancia de una excepción antes de generarla y agregarle los atributos que desee.

>>> try:
...     raise Exception('spam', 'eggs')
... except Exception as inst:
...     print(type(inst))    # instancia de la excepcion
...     print(inst.args)     # argumentos guardados en .args
...     print(inst)          # __str__ permite args para que          
                             #sean imprimidos directamente
...                          # pero pueden ser sobrescritos 
                             #en las subclases de la            
                             #excepcion
...     x, y = inst.args     # desempaquetando  args
...     print('x =', x)
...     print('y =', y)
...
<class 'Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs

Cuando una excepción tiene argumentos, estos se imprimen en la parte final del mensaje para las excepciones no gestionadas (“Unhandled exception”).

Los controladores de excepciones no solo manejan las excepciones si ocurren inmediatamente en la cláusula try, sino también si ocurren dentro de funciones que se llaman (incluso indirectamente) en la cláusula try.

Por ejemplo:

>>> def this_fails():
...     x = 1/0
...
>>> try:
...     this_fails()
... except ZeroDivisionError as err:
...     print('Handling run-time error:', err)
...
Handling run-time error: division by zero

…. siempre habrá poesía

J. A. Becquer

TypeError: ‘Index’ object is not callable

python error

TypeError: ‘Index’ object is not callable, es un error que puedes recibir, al escribir esto en Pandas:

data_df.columns()

Esto se debe a que están intentado llamar el método de modo incorrecto.

Desarrollar funciones en Python

Es un error común de principiante, porque intentas obligar a Pandas a que use cómo índice el propio índice que el establece.

El objeto index no puede llamarse , porque no es un atributo del dataframe, entonces no puede llamarlas de ese modo, según el concepto de la librería.

Por la misma causa podrías recibir el error SyntaxError: invalid syntax

Solución

data_df.columns

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias

«Sin   herramientas para imaginar tu secreto…..»

Y

AttributeError: module urllib has no attribute urlopen 

error en python


Si alguna vez al trabajar con la librería urllib, te ha lanza AttributeError: module urllib has no attribute urlopen, te explico como se resuelve, más adelante.

El error en principio se debe a que el método urllib.urlopen() funciona con Python 2 y seguramente desarrollas sobre Python3.

Otros artículos sobre Python

La solución es importar urllib.request, que es donde podemos hallar urlopen en Python3.

Entonces al llamarla puedes hacer:

 urllib.request.urlopen(…)

Y hasta aquí.

Deseo sinceramente que esto sirva de ayuda a alguien.

Hay que sembrar un árbol, un ansia, un sueño, un hijo, porque la vida es eso , sembrar, sembrar, sembrar

Error _xsrf’ argument missing from post

python error

Si aparece el error _xsrf’ argument missing from post, mientras trabajas  con Jupyter Notebook , indicando que no se guarda el archivo, puedes probar una de estas soluciones.

Abre otro cuaderno, que no esté en ejecución, pero que exista, en el mismo kernel, y el problema desaparecerá.

Otros errores en Python

Ahora podrás volver a guardar los cuadernos que anteriormente mostraban el error _xsrf.

Una opción que puede funcionar si lo anterior no resuelve el problema es ir a la página de inicio de Jupyter y actualice el navegador.

En caso de hayas cerrado la página de inicio de Jupyter, puedes encontrar un enlace en la terminal desde la que iniciaste Jupyter notebook.

Espero modestamente, que este post sirva de ayuda  a alguien.

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

J. Sabina.

Error unrecognized arguments: -f en Jupyter notebook

python error

El error unrecognized arguments: -f que aparece al usar Jupyter notebook, si estamos usando argparse(), puede tener una fácil solución.

 Si has utilizado la sentencia:

parser = parser.parse_args()

Esta puede ser la causante de tu error.

Ver otros errores en Python

Puedes resolverlo escribiendo en su lugar:

parser = parser.parse_args(args=[])

Y hasta aquí ,espero que sirva de ayuda, a alguien.

Muchas gracias

El que siempre soño, tiene derecho a ganar

I.Delgado
Translate »