Assertion Error en Python

python error

El manual indica que Assertion Error en Python se lanza cuando la declaración assert falla. Acá te explico porque.

El lenguaje incluye esta declaración assert (afirmación) incorporada que le permite crear salidas de mensajes de depuración simples basadas en afirmaciones lógicas simples.

Cuando una declaración afirmativa (assertion) de este tipo falla (es decir, devuelve un valor False), se genera un AssertionError.

El Assertion Error, se basa en el concepto de que al escribir un código, se  declara que una condición es verdadera mediante una declaración de afirmación antes de ejecutar el módulo.

Si la condición es Verdadera, el control simplemente se mueve a la siguiente línea de código.

En caso de que sea False, el programa deja de ejecutarse y devuelve AssertionError Exception. 

Un error común es una condición en la cual se retorna un None, lo cual es visto como un fallo por el interprete.

Así que si tienes este error debes comenzar a revisar por ahí.

En otro artículo te diré como capturar esta excepción y manejarla.

El amor construye, con las mismas razones que el odio destruye. Emplean la misma energía, copan al cerebro con la misma fuerza, arrastran pasiones con el mismo fervor; no es raro entonces que pasemos de uno a otro con tanta impunidad social.

Y

Copiar un fichero en Python con shutil

logo python

Veamos hoy como copiar un fichero en Python con shutil, que es un modulo que Python ofrece para este tipo de acciones

Tenemos varias opciones, a continuación, te las muestro:

copy

Este es un modulo de Python, que pertenece a shutil().

copy() copia el contenido del fichero y sus permisos, pero sin embargo, no copia los metadatos del fichero.

copy() acepta como parámetros, los siguientes:

  • src: Ruta completa del fichero origen, en formato cadenav(string), o un objeto(PathLike)
  • dst: Ruta del fichero  de destino. En este caso  hay que considerar que si la ruta es un directorio, se copiará el fichero origen en el directorio y tomará como nombre el del fichero original.
  • follow_symlinks (default =True): Cuando follow_symlinks es falso y src es un enlace simbólico, dst se creará como un enlace simbólico. Si follow_symlinks es verdadero y src es un enlace simbólico, dst será una copia del archivo al que se refiere src.
import shutil
shutil.copy('origen.txt', 'destino.txt')
shutil.copy('/ruta/origen.txt', '/ruta/destino/copia.txt')
shutil.copy('/ruta/origen.txt', '/ruta/destino')

Otros artículos sobre Python

copy2

La función copy2(), permite copiar los metadatos del archivo y funciona exactamente igual que copy().

import shutil
shutil.copy2('origen.txt', 'destino.txt')
shutil.copy2('/ruta/origen.txt', '/ruta/destino/copia.txt')
shutil.copy2('/ruta/origen.txt', '/ruta/destino')

Copyfile

copyfile() permite  copiar  solo el contenido de un fichero.

Su sintaxis es:

copyfile(src, dst, follow_symlinks=True). 

Esta función hace una copia del fichero original src() en el fichero destino dst(). Tanto src(), como dst(), son cadenas de texto que ofrecen rutas.

Considera, que si el fichero destino ya existe, este será reemplazado.

La función lanzara un OSError, si no se puede  escribir en el destino.

import shutil
shutil.copyfile('origen.txt', 'destino.txt')
shutil.copyfile('/ruta/origen.txt', '/ruta/destino/copia.txt')

Copyfileobj

Esta función funciona como  copyfile(), con la diferencia  de que src() y dst() deben ser objetos de tipo fichero (no  un string con las rutas).

import shutil
file_src = 'source.txt' 
f_src = open(file_src, 'rb')
file_dest = 'destination.txt' 
f_dest = open(file_dest, 'wb')
shutil.copyfileobj(f_src, f_dest)

Y hasta aquí, esto es todo.

Espero que sirva de ayuda a alguien

Para ser parte del 1%, hay que hacer lo que el 99% no hace.

D.

Cambiar el tamaño de la imagen en Python con opencv

logo python

En este pequeño post enseñaré como cambiar el tamaño de una imagen en Python con opencv. Python es un lenguaje que resulta útil, para llevar a cabo muchas tareas necesarias, incluido el tratamiento de imágenes, que pueden exigir diferentes niveles de complejidad.

Consideremos primero que una  imagen es un array, que puede ser tratado como un objeto numpy.

El método resize() de Python no es efectivo en este caso, ya que no tiene en cuenta el eje, y debido a esto no es capaz de extrapolar y/o interpolar.

El módulo opencv se usa en Python para  la visión por computadora  y el procesamiento de imágenes.

El procedimiento en esencia es leer primero la imagen empleando la función imread(), y luego cambiar su dimensión empleando función resize().

La sintaxis seria así:

dst = cv2.resize(src, dsize[, fx[, fy[, interpolation]]]])

Donde fx y fy son factores de escala a lo largo de los ejes x e y, dsize() se refiere al tamaño de la imagen de salida y el indicador de interpolación se refiere al método que vamos a usar.

Ya sea que se especifique (fx, fy) o dsize, OpenCV calcula el otro automáticamente.

Lo primero es disponer de opencv en el ordenador, para ello deberás descargarla y tenerla ya instalada. Puedes seguir las instrucciones acá .

import cv2
import numpy as np
img = cv2.imread('archivo.jpeg')
res = cv2.resize(img, dsize=(54,140),interpolation=cv2.INTER_CUBIC)

Podemos emplear como interpolación las siguientes:

Nearest Neighbor:

near_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_NEAREST)

la bilineal,

bilinear_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_LINEAR)

o la bicúbica que teníamos en el ejemplo inicial

bicubic_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_CUBIC)

Todas emplean algoritmos diferentes, y su efectividad varía de un caso a otro.

Y hasta aquí, esto es todo.

Espero que esto sirva de ayuda a alguien.

La ignorancia, es la muerte de los vivos

FloatingPointError en Python

python error

El  FloatingPointError en Python, indica que algo salió mal, al efectuar  un cálculo de punto flotante.

Las causas del error por tanto pueden ser varias, y su manejo dependerá de tus objetivos.

Si necesitamos evitarlo, el empleo de decimal(), puede ayudarnos,  ya que  contienen varias funciones integradas para operaciones matemáticas simples (por ejemplo, sqrt); sin embargo es posible que los resultados de estas funciones no siempre coincidan con la función correspondiente en matemáticas u otros módulos con mayor precisión.

Justo por esto es más recomendable emplear math(), por su mayor exactitud.

Lo importante que debes saber, es que la causa de este  error  muchas veces está, en las características de los números con base N.