SQLSTATE[HY000]: General error: 1835 Malformed communication packet

laravel error

El error ‘SQLSTATE[HY000]: General error: 1835 Malformed communication packet’, que suele aparecer si nuestra APP en Laravel, trabaja con Maria DB y no soporta la nueva versión del PHP.

Como es un error de configuración, y las nuevas versiones de PHP, son algo mas dúctiles, con la creación de consultas,  debe bastarnos con modificar nuestro archivo database config, añadiendo esta línea de código:

options => [PDO::ATTR_EMULATE_PREPARES => true]

Ojo, esta solución puede tener inconvenientes, pues lo que estamos haciendo es habilitar el uso de declaraciones preparadas en la caché, lo cual puede no ser siempre conveniente.

Lo que hace esta sentencia es hacer el reemplazo de los parámetros  en la librería PDO, en vez de hacerlo en el servidor y así burla la desactualización, por lo que los errores de sintaxis en el tiempo de preparación de la consulta desaparecen, y se traspasan solo al momento de ejecución.

«Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino»

UnboundLocalError en Python

python error

Como sugiere el nombre, el error UnboundLocalError solo se genera, cuando se hace referencia de manera incorrecta, a una variable local no asignada.

Todas la excepciones en Python heredan de la clase BaseException, o extienden de una clase derivada de ella.

La jerarquía de la este error es la siguiente:

En la mayoría de los casos, esto ocurrirá al intentar modificar una variable local antes de que sea realmente asignada dentro del ámbito local.

Como puede ver, la función incrementar_valor() hace exactamente lo que el nombre implica: intentar incrementar la variable de conteo en uno y luego generar el resultado.

Sin embargo, existe una clara falta de asignación para la variable de recuento en el alcance local, y al no haber sido definida antes, la ejecución de este código genera un UnboundLocalError:

def incrementar_valor():
        count += 1
        print(count)
incrementar_valor()
UnboundLocalError                         
Traceback (most recent call last)
<ipython-input-50-8c8a38e696a5> in <module>
----> 1 incrementar_valor()
      2 

<ipython-input-49-2b22812a127f> in incrementar_valor()
      1 def incrementar_valor():
      2 
----> 3         count += 1
      4         print(count)
      5 

UnboundLocalError: local variable 'count' referenced before assignment

Dicho de otro modo, lo qué ha sucedido aquí es  que, dado que el analizador no puede localizar la variable count(),  no se puede generar una solución para  ejecutar la instrucción de incremento.

O sea estamos indicando un incremento, en una variable desconocida.

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

Gracias

…. hay que levantarse cada mañana con una meta y dormirse cada noche con una esperanza….

Y.

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

AttributeError: ‘AxesSubplot’ object has no attribute ‘set_axis_labels’

seaborn error

Si estas recibiendo el error ‘AxesSubplot’ object has no attribute ‘set_axis_labels’; te daré una explicación de a que se debe.

Seaborn, no devuelve una figura que es lo que esperas obtener, sino un objeto  de ejes(axis-object)

La solución es importar matplotlib que será la encargada de dibujar el gráfico en el lugar indicado.

Puedes verlo en el ejemplo, que sigue.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

trim= pd.DataFrame({'mes': ['ene', 'feb', 'mar'], 'val': [100, 200, 300]})
barplot(x = 'mes', y = 'val', 
trim = meses,
color = 'blue')
ax.set(xlabel='common xlabel', ylabel='common ylabel')
plt.show()

Puedes contactar conmigo acá:

Por que la vida es eso sembrar, sembrar, sembrar

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

Acceder a archivos o directorios con espacios en el nombre en Mac.

logo mac

Puede ser que necesitemos a menudo acceder a archivos o directorios con espacios en el nombre en Mac; acá les explico como hacerlo.

Al intentar acceder a un archivo en Mac de la manera habitual,  que tiene espacios en el nombre solemos recibir este error:

cd mi archivo
no such file or directory 

Existen al menos  tres soluciones para ello.

La primera es empleando el símbolo de escape

Esta vía  es más compleja. Lo que debemos hacer para acceder a un directorio con espacio entre el nombre,  es utilizar  el símbolo \  seguido de un espacio.

Si tuviéramos, por ejemplo  un directorio llamado mi directorio

Seria algo así como:

cd mi\ directorio/

La segunda opción es muy sencilla, basta con encerrar entre comillas dobles, el nombre del archivo tal y como está, o sea así:

cd  "mi directorio"

Y la tercera es acudir al autocompletado, para lo cual emplearemos Tab y autocompletar el nombre del archivo o el directorio.

Como siempre, espero que sirva de ayuda a alguien.

Muchas gracias.

Porque la vida es eso sembrar, sembrar, sembrar

J. A. Buesa

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.
Translate »