Módulos#

Generated Mon 03 Aug 2026 05:40:41 UTC

Parámetros solo posicionales#

Para ahorrar tamaño de código, muchas funciones que aceptan argumentos de palabra clave en CPython solo aceptan argumentos posicionales en MicroPython.

MicroPython marca los parámetros solo posicionales de la misma manera que CPython, insertando un / para marcar el final de los parámetros posicionales. Cualquier función cuya firma termine en / acepta solo argumentos posicionales. Para más detalles, consulte PEP 570.

Ejemplo#

Por ejemplo, en CPython 3.4 esta es la firma del constructor socket.socket:

socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

Sin embargo, la firma documentada en MicroPython es:

socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /)

El / al final de los parámetros indica que todos son solo posicionales en MicroPython. El siguiente código funciona en CPython pero no en la mayoría de los puertos de MicroPython:

import socket
s = socket.socket(type=socket.SOCK_DGRAM)

MicroPython lanzará una excepción:

TypeError: function doesn't take keyword arguments

El siguiente código funcionará tanto en CPython como en MicroPython:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

array#

La comparación entre diferentes códigos de tipo no está admitida#

Causa: Tamaño del código

Solución: Compare elementos individuales

Código de ejemplo:

import array

array.array("b", [1, 2]) == array.array("i", [1, 2])

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
NotImplementedError:

La comprobación de desbordamiento no está implementada#

Causa: MicroPython implementa truncamiento implícito para reducir el tamaño del código y el tiempo de ejecución

Solución: Si se necesita compatibilidad con CPython, enmascare el valor explícitamente

Código de ejemplo:

import array

a = array.array("b", [257])
print(a)

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
OverflowError: signed char is greater than maximum
array('b', [1])

La búsqueda de enteros no está implementada#

Código de ejemplo:

import array

print(1 in array.array("B", b"12"))

CPython output:

MicroPython output:

False
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
NotImplementedError:

La eliminación de arrays no está implementada#

Código de ejemplo:

import array

a = array.array("b", (1, 2, 3))
del a[1]
print(a)

CPython output:

MicroPython output:

array('b', [1, 3])
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
TypeError: 'array' object doesn't support item deletion

La suscripción con paso != 1 aún no está implementada#

Código de ejemplo:

import array

a = array.array("b", (1, 2, 3))
print(a[3:2:2])

CPython output:

MicroPython output:

array('b')
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported

errno#

MicroPython does not include ENOTSUP as a name for errno 95.#

Cause: MicroPython does not implement the ENOTSUP canonical alias for EOPNOTSUPP added in CPython 3.2.

Workaround: Use errno.EOPNOTSUPP in place of errno.ENOTSUP.

Código de ejemplo:

import errno

print(f"{errno.errorcode[errno.EOPNOTSUPP]=!s}")

CPython output:

MicroPython output:

errno.errorcode[errno.EOPNOTSUPP]=ENOTSUP
errno.errorcode[errno.EOPNOTSUPP]=EOPNOTSUPP

json#

El módulo JSON no lanza una excepción cuando el objeto no es serializable#

Código de ejemplo:

import json

try:
    print(json.dumps(b"shouldn't be able to serialise bytes"))
except TypeError:
    print("TypeError")

CPython output:

MicroPython output:

TypeError
"shouldn't be able to serialise bytes"

os#

El atributo environ no está implementado#

Solución: Use getenv, putenv y unsetenv

Código de ejemplo:

import os

try:
    print(os.environ.get("NEW_VARIABLE"))
    os.environ["NEW_VARIABLE"] = "VALUE"
    print(os.environ["NEW_VARIABLE"])
except AttributeError:
    print("should not get here")
    print(os.getenv("NEW_VARIABLE"))
    os.putenv("NEW_VARIABLE", "VALUE")
    print(os.getenv("NEW_VARIABLE"))

CPython output:

MicroPython output:

None
VALUE
should not get here
None
VALUE

getenv devuelve el valor real en lugar del valor en caché#

Causa: El atributo environ no está implementado

Código de ejemplo:

import os

print(os.getenv("NEW_VARIABLE"))
os.putenv("NEW_VARIABLE", "VALUE")
print(os.getenv("NEW_VARIABLE"))

CPython output:

MicroPython output:

None
None
None
VALUE

random#

El método getrandbits solo puede devolver un máximo de 32 bits a la vez.#

Causa: El estado interno del PRNG es de solo 32 bits, por lo que solo puede devolver un máximo de 32 bits de datos a la vez.

Solución: Si necesita un número de más de 32 bits, utilice el módulo random de micropython-lib.

Código de ejemplo:

import random


x = random.getrandbits(64)
print("{}".format(x))

CPython output:

MicroPython output:

11947790255791459587
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
ValueError: bits must be 32 or less

El método randint solo puede devolver un entero de como máximo el tamaño de palabra nativo.#

Causa: El PRNG solo puede generar 32 bits de estado a la vez. El resultado se convierte en un int de tamaño nativo en lugar de un objeto int completo.

Solución: Si necesita enteros más grandes que el tamaño de palabra nativo, use el módulo random de micropython-lib.

Código de ejemplo:

import random


x = random.randint(2**128 - 1, 2**128)
print("x={}".format(x))

CPython output:

MicroPython output:

x=340282366920938463463374607431768211455
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
OverflowError: overflow converting long int to machine word

struct#

Struct pack with too few args, not checked by MicroPython#

Código de ejemplo:

import struct

try:
    print(struct.pack("bb", 1))
    print("Should not get here")
except:
    print("struct.error")

CPython output:

MicroPython output:

struct.error
b'\x01\x00'
Should not get here

Struct pack with too many args, not checked by MicroPython#

Código de ejemplo:

import struct

try:
    print(struct.pack("bb", 1, 2, 3))
    print("Should not get here")
except:
    print("struct.error")

CPython output:

MicroPython output:

struct.error
b'\x01\x02'
Should not get here

Struct pack with whitespace in format, whitespace ignored by CPython, error on MicroPython#

Causa: MicroPython está optimizado para el tamaño del código.

Solución: No use espacios en las cadenas de formato.

Código de ejemplo:

import struct

try:
    print(struct.pack("b b", 1, 2))
    print("Should have worked")
except:
    print("struct.error")

CPython output:

MicroPython output:

b'\x01\x02'
Should have worked
struct.error

sys#

No es posible reemplazar sys.stdin, sys.stdout y sys.stderr#

Causa: Están almacenados en memoria de solo lectura.

Código de ejemplo:

import sys

sys.stdin = None
print(sys.stdin)

CPython output:

MicroPython output:

None
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
AttributeError: 'module' object has no attribute 'stdin'