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

Trabajar con el modulo re() de Python

logo python

Python tiene un módulo llamado re() para trabajar con las RegEx. Trabajar con el modulo re(), no es complejo.

Pueden ver un articulo que escribí hace un tiempo, sobre ello.

En Python, existen herramientas especificas, que funcionan como auxiliares y modificadores para el trabajo con las RegEx.

Me refiero tanto al uso del modulo re() , como al empleo de r o R antes de una RegEx como prefijo.

Cuando se escribe una expresión regular y se coloca el \ delante de ella, este equivale a un escape del carácter que le sigue, de este modo \n o \r provocará que el lenguaje escape estos caracteres; sin embargo cuando colocamos r delante, estos serán considerados y tratados como un carácter normal.

La sintaxis para esto, es por ejemplo r’[\n\r]’

Veamos como usar re()

re.findall()

Nos devuelve una lista de todas las cadenas que contienen la coincidencias

import re

cadena = 'Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'
pattern = '\D+'
buscamos todos aquellos caracteres que no sean digitos con re.findall()
coincid = re.findall(pattern, cadena)
coincid
ouput:['Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.']

pattern = '\d+'
output:[]

re.split()

Separa las cadenas donde existen las coincidencias y retorna una lista de  cadenas donde hay coincidencias.

pattern = '\D+'
cadena = 'amigos 12345 45:67'
#separamos las palabras de la cadena con re.split()
coincid = re.split(pattern, cadena)
coincid
output: ['', '12345', '45', '67']
pattern = '\d+'
output:cadena = 'amigos 12345 45:67'

#separamos las palabras de la cadena con re.split()
coincid = re.split(pattern, cadena)
coincid
output:['amigos ', ' ', ':', '']

Como se ve en el ejemplo se puede usar maxsplit para determinar el numero máximo de separaciones que deseamos que ocurran.

#utilizamos maxsplit 1
pattern = '\D+'
cadena = 'amigos 12345 45:67'
coincid = re.split(pattern, cadena, 1)
coincid
output:['', '12345 45:67']

#utilizamos maxsplit 3
pattern = '\D+'
cadena = 'amigos 12345 45:67'
coincid = re.split(pattern, cadena, 3)
coincid
output:['', '12345', '45', '67']

Re.sub()

Devuelve la cadena donde existe coincidencia y reemplaza el contenido con el valor de la variable replace.

#sustituimos en la cadena los valores con re.sub()
cadena = 'Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'
pattern = '\s+'
replace = ','
nueva_cadena = re.sub(pattern, replace, cadena)
nueva_cadena
out:'Cuanto,hice,hasta,hoy,,y,haré,,es,para,eso.,En,silencio,ha,tenido,que,ser,y,como,indirectamente,,porque,hay,cosas,que,para,lograrlas,han,de,andar,ocultas,,y,de,proclamarse,en,lo,que,son,levantarían,dificultades,demasiado,recias,para,alcanzar,sobre,ellas,el,fin.'

Podemos contar  utilizando count() como cuarto parámetro, para determinar cuántos reemplazosharenmos.

Si omitiéramos el valor sub(), reemplazará todas las coincidencias.

#añadiendo count() como parametro
string = 'Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'
pattern = '\s+'
replace = ','
nueva_cadena = re.sub(pattern, replace, string, 5)
nueva_cadena
output:'Cuanto,hice,hasta,hoy,,y,haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'

re.subn()

Es similar a sub(), pero devuelve una tupla con contiene la nueva cadena y la cantidad de sustitucones realizadas.

#empleamos re.subn(), para obgener una tupla que contiene la nueva cadena y la cantidad de substituciones realizadas
cadena = 'Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'
pattern = '\s+'
replace = ','
nueva_cadena = re.subn(pattern, replace, cadena)
nueva_cadena
output: ('Cuanto,hice,hasta,hoy,,y,haré,,es,para,eso.,En,silencio,ha,tenido,que,ser,y,como,indirectamente,,porque,hay,cosas,que,para,lograrlas,han,de,andar,ocultas,,y,de,proclamarse,en,lo,que,son,levantarían,dificultades,demasiado,recias,para,alcanzar,sobre,ellas,el,fin.', 44)

re.search()

Se emplea para la búsqueda de coincidencias directamente, utilizando dos argumentos, el patrón a buscar y la cadena donde buscarlo.

Su resultado es un objeto match, si no hubiera coincidencia retornaría None.

#empleamos re.search(), para hallar la subcadena silencio
sustituimos en la cadena los valores con re.sub()
cadena = 'Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'
busqueda = re.search('silencio',cadena)
busqueda
output:<re.Match object; span=(47, 55), match='silencio'>

El objeto que nos devuelve la variable búsqueda es del tipo match, con el cual podemos hacer también varias operaciones.

#operando con el resultado, ahora buscamos silencio al final de una cadena y hacemos algo
adena = 'Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'
busqueda = re.search('\Zsilencio',cadena)
if busqueda:
pass
else:
print('no se halló nada')
output:no se halló nada

Con re(), podemos buscar utilizando re.match(), que  recibe dos parámetros: los patrones que buscamos y el texto donde los buscamos.

match.group()

Nos permite agrupar los resultados en subcadenas.

#buscamos con match.group() el grupo de letras seguidas por una r
cadena = 'Cuanto hice hasta hoy, y haré, es para eso. En silencio ha tenido que ser y como indirectamente, porque hay cosas que para lograrlas han de andar ocultas, y de proclamarse en lo que son levantarían dificultades demasiado recias para alcanzar sobre ellas el fin.'
pattern = '(a|e|i)r'
match = re.search(pattern, cadena)
if match:
print(match.group())
else:
print('no se halló nada')
output:ar

#buscamos un grupo que tiene dos digitos separados por un espacio de una cadena no digital de seis caracteres
cadena = '234 567896 10 acceso dni color de los ojos'
pattern = '(\d{2}) (\D{6})'
match = re.search(pattern, cadena)
if match:
print(match.group())
else:
print('no se halló nada')
output: 10 acceso

Podemos condicionar cuantas subcadenas queremos y sus posiciones

#imprimiendo solo el primer subgrupo
match = re.search(pattern, cadena)
if match:
print(match.group(1))
else:
print('no se halló nada')
output:10

#obteniendo la posicion donde comienza el grupo, donde termina y una tupla con ambos valores
match = re.search(pattern, cadena)
if match:
print(match.start(), match.end(), match.span())
else:
print('no se halló nada')
output:11 20 (11, 20)

Match.string

Nos devuelve la cadena.

match.string
output:'234 567896 10 acceso dni color de los ojos'

«En total oscuridad cualquier cosa, puede ser luz»

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

Recuperar una imagen en Django, dinámicamente.

logo django

Veamos como recuperar una imagen en Django, para que Django no la dibuje dinámicamente en función del usuario.

Cuando trabajamos en Django, es común colocar el avatar de nuestro usuario en el panel, si tenemos habilitado nuestro modulo "context_procesor", dentro de templates en nuestro archivo setting.py., podemos seguir las instrucciones siguiente.

Otro Post sobre Django

Como recuperar una imagen en Django dinámicamente.

El código para llamar a nuestra imagen podría ser este:

<img src='{{user.avatar.url }}'
alt="{{user.username }}" 
class="class="img-fluid  user_imag rounded-circle">

Si el modulo no estuviera habilitado debemos incluirlo

TEMPLATES = [
 {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
        'django.template.context_processors.debug',
        'django.template.context_processors.request',     #modulo
        'django.contrib.auth.context_processors.auth',
        'django.contrib.messages.context_processors.messages',
            ],
         },
      },
]

La magia está, en que el método request(), nos traerá la instancia del user a toda pagina que tengamos, por tanto dispondremos de sus atributos, para el usuario visitante.

Recuperando una imagen en el html

Suponiendo que hemos creado nuestro modelo, nuestro form y nuestras url, podemos recuperar a nuestra imagen con

{% for a in object_list  %} 
<section class="dashboard-header section-padding" style=" border:2px solid blue; margin-bottom:15px;">
  <div class="container-fluid">
    <div class="col-lg-3" >
      <img  src='{{a.profile.photouser.url}}'  alt="{{a.user.username}}" class="img-fluid  user_imag rounded-circle">
    </div> …….
 </section>
 {% endfor %} 
  

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

Espero que sirva de ayuda a alguien

Matplotlib. Gráficos de dispersión y línea.

matplotlib

Esta vez tocaré el tema de Matplotlib. Graficos de dispersion en linea, ya que matplotlib es una librería completamente pensada, para crear visualizaciones estáticas, animadas e interactivas en Python.

Esta capacidad la hace especialmente importante, para la visualización de datos en estudios de inteligencia artificial.

Su amplia capacidad le permite trazar diferentes tipos de gráficos en Python (gráficos  : de dispersión,    circulares,   de líneas, histogramas, gráficos 3-D y muchos más.

Veremos en este articulo el uso de algunos de   ellos: los de dispersión y los de línea.

En lo adelante, escribiré otros artículos sobre los otros tipos.

Gráficos de dispersión  

Los gráficos de dispersión se utilizan para observar la relación entre variables y utiliza puntos para representar la relación entre ellas y cómo el cambio en una, afecta a la otra.

Gráficos de dispersión empleando el método plot()

El método plot(), acepta cuatro parámetros básicos, el eje de la x, el eje de la y, el tipo de marcador y el color de los puntos en el gráfico; e incluso estos dos últimos pueden obviarse.

De hacerlo plot(), colocará una línea por defecto, si no establecemos otro marcador, y el color azul.

La sintaxis es:

plt.plot(x, y, 'o', color='blue')

Gráficos de dipersión o scatter con el método pyplot()

El método se utiliza con la sintaxis siguiente:

matplotlib.pyplot.scatter()

El método scatter() en la biblioteca matplotlib se usa para dibujar un diagrama de dispersión.

Sintaxis

La sintaxis del método scatter() es:

matplotlib.pyplot.scatter(x_axis_data, y_axis_data, s = None, c = None, marker = None, cmap = None, vmin = None, vmax = None, alpha = None, linewidths = None, edgecolors = None)

El método scatter() toma los siguientes parámetros:

x_axis_data: una matriz que contiene datos del eje x
y_axis_data: una matriz que contiene datos del eje y
s: tamaño del marcador (puede ser escalar o una matriz de tamaño igual al tamaño de x o y)
c: color de secuencia de colores para rotuladores
marcador(marker): estilo del marcador
cmap- nombre de cmap
linewidths- ancho del borde del marcador
edgecolor- color del borde del marcador
alfa(opacidad): valor de mezcla, entre 0 (transparente) y 1 (opaco)

Excepto x_axis_data e y_axis_data, todos los demás parámetros son opcionales y su valor predeterminado es none.  

Metodo plot() versus pyplot()

Los métodos plot() y pyplot() difieren sobre todo, en su capacidad para adaptarse a las características de que necesitamos dotar a los gráficos, para expresar mejor nuestros datos.

La diferencia entre ellos, estriba en el volumen del dataset, sobre todo.

pyplot() ofrece una configuración más avanzada, que le permite dibujar con colores y tamaños diferentes cada punto, lo cual le obliga a renderizar una y otra vez, mientras plot(), solo dibuja de un solo color y tamaño todo el set.

En unos cientos de datos puede no notarse la diferencia, pero en grandes datasets, el uso de memoria puede hacerse sentir.

Este artículo mostraré algunos ejemplos de visualizar nuestros datos utilizando la librería matplotlib y ambos métodos.

Utilizaremos los datos que tenemos ya preparados en un archivo csv, en principio con solo dos columnas, ventas en millones de euros y vendedores.  

Comenzaremos importando las librerías y nuestro archivo

Examinamos la estructura del archivo y lo convertimos a int()

Para todas las gráficas de Matplotlib, se comienza creando una figura y un eje.

En su forma más simple, se pueden crear una figura y ejes de la siguiente manera:

figure(), es una instancia de la clase plt.figure(); la cual constituye un contenedor único que contiene todos los objetos que representan ejes, gráficos, texto y etiquetas.

Los ejes (axes), son a su vez una instancia de la clase plt.axes(),  que se ve como  el cuadro delimitador con marcas y etiquetas, que contendrá los elementos de la trama que componen nuestra visualización.

Normalmente utilizaré fig(); como la variable que contiene la instancia de figure, y ax() como la que contiene la instancia de la clase axes

Visualizamos con el uso de plt.plot().

El tercer argumento que le pasamos a la función, indica el tipo de símbolo que emplearemos.

En la primera figura mostramos nuestros datos y en la segunda los unimos con una línea, utilizando '–

Los marcadores que usamos, pueden ser diseñados a medida, como se ve debajo

Podemos hacer lo mismo con plot.scatter()

Emplearemos una función para trabajar nuestros gráficos. Veamos por ejemplo como mostrarlos en una gama de colores, que indican el peso de cada variable.

Podemos usar la función subplot()  de pyplot(), para mostrarlos de diferentes formas. Importaremos primero un dataset, con cuatro columnas para trabajar con más datos.

La instancia de pyplot(), permite establecer el  tamaño de la figura.

Usando el objeto ax devuelto, que se obtiene desde la función subplots(), y  llamamos  a la función scatter().

 

Mostremos varios gráficos en una sola visualización

Podemos también crear un grafico tridimensional

Gráficos de línea

El más sencillo de todos los gráficos es la visualización de una sola función del tipo  y = f(x).  

Veamos como crearlos

Creemos ahora varias líneas en un solo espacio

Podemos colorear las líneas con cualquier color, y pasándolo en diferentes formatos a través del parámetro color()

Lee mas sobre matplotlib, en este articulo

Podemos combinar emplear símbolos y  denominaciones para escoger el tipo de línea con el parámetro linestyle()

Ahora combinemos pasándolo directamente como un parámetro más, color y estilo de línea sin emplear linestyle()

Matplotlib, nos permite ajustar los limites de nuestro gráfico con el uso de los métodos plt.xlim()  y plt.ylim()

Su sintaxis es:

plt.xlim(10, 100)
plt.ylim(10, 90);

Podemos invertir los ejes, para ello bastara invertir su orden dentro del parámetro.

Axis

plt.axis()

Este método permite en una sola  llamada,  mezclar los diferentes parámetros del gráfico.

No debe confundirse axes con axis; plt.axis(), tiene una sintaxis asi

[xmin, xmax, ymin, ymax]:

Tight

Con tight podemos envolver los limites de nuestros puntos

Equal

Con equal garantizamos una relación de aspectos entre ambos ejes.

Etiquetar, nombrar e identificar el gráfico

También podemos por supuesto colocar los títulos del grafico, las leyendas etc.

Matplotlib, nos permite eso de un modo fácil.

En la imagen siguientes podemos ver ejemplos de como añadir etiquetas

Traducir de plt.plot() a ax.plot()

Si bien la mayoría de las funciones plt se traducen directamente a métodos ax (como plt.plot () → ax.plot (), plt.legend () → ax.legend (), etc.), este no es el caso para todos los comandos. En particular, las funciones para establecer límites, etiquetas y títulos se modifican ligeramente. Para realizar la transición entre funciones de estilo MATLAB y métodos orientados a objetos, realice los siguientes cambios:

plt.xlabel () → ax.set_xlabel ()

plt.ylabel () → ax.set_ylabel ()
plt.xlim () → ax.set_xlim ()
plt.ylim () → ax.set_ylim ()
plt.title () → ax.set_title ()

En la interfaz orientada a objetos para graficar, en lugar de llamar a estas funciones individualmente, a menudo es más conveniente usar el método ax.set () para establecer todas estas propiedades a la vez:

ax = plt.axes()
ax.plot(z, y)
ax.set(xlim=(0, 100), ylim=(10, 100),
    xlabel='quejas', ylabel='vendedores',
    title='Grafico simple');

Hasta aquí por hoy, en otros artículos hablaré de como trabajar con otros gráficos

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

Gracias

“Todo aquello que constituye la esencia del ser humano, encierra en si mismo, la razón de su propia extinción:  el oxigeno, los sentimientos, el agua, …

Y

Diferencias entre json.dump() vs json.dumps

logo python

En un articulo antiguo, hable de las diferencias entre json.dump() vs json.dumps(); métodos con los cuales deserializamos en Python archivos json.

En este caso hablaré de la diferencia entre dump y dumps, que son métodos, utilizados para serializar un objeto Python a  un objeto json.

json.dump()

Serializa un objeto python como un objeto json. Se apoya en la funcion write() y soporta file como objeto.

El modulo json de Python siempre produce objetos tipo string,  y no objetos byte, por tanto tiene lógica que write(), acepta cadenas (string), a modo de input.

json.dumps()

Serializa el objeto como una cadena(string) json.

Dicho de otro modo json.dump()serializa a archivos json y json.dumps() serializa a cadenas json.

Los argumentos de ambas funciones son los mismos que pueden verse aquí

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

Ofertas, solicitudes  y colaboraciones, aquí. Las preguntas las responderé tan pronto pueda, pero no quedaran sin respuesta

Gracias

“Todo como el diamante, antes que luz es carbon”

JMarti

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 »