Módulos

Generated Fri 19 Jun 2026 22:08:45 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:

10880755926996596610
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=340282366920938463463374607431768211456
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'