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'
|