Modules

Generated Fri 19 Jun 2026 22:08:45 UTC

Paramètres positionnels uniquement

Pour économiser de l’espace de code, de nombreuses fonctions qui acceptent des arguments nommés dans CPython n’acceptent que des arguments positionnels dans MicroPython.

MicroPython indique les paramètres positionnels uniquement de la même façon que CPython, en insérant un / pour marquer la fin des paramètres positionnels. Toute fonction dont la signature se termine par / n’accepte que des arguments positionnels. Pour plus de détails, voir PEP 570.

Exemple

Par exemple, dans CPython 3.4, voici la signature du constructeur socket.socket

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

Cependant, la signature documentée dans MicroPython est

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

Le / en fin de paramètres indique qu’ils sont tous positionnels uniquement dans MicroPython. Le code suivant fonctionne dans CPython mais pas dans la plupart des portages MicroPython

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

MicroPython lèvera une exception

TypeError: function doesn't take keyword arguments

Le code suivant fonctionnera à la fois dans CPython et dans MicroPython

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

array

La comparaison entre différents codes de type n’est pas prise en charge

Cause : Taille du code

Contournement : Comparez les éléments individuellement

Exemple de code

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 vérification de débordement n’est pas implémentée

Cause : MicroPython implémente la troncature implicite afin de réduire la taille du code et le temps d’exécution

Contournement : Si la compatibilité CPython est nécessaire, masquez la valeur explicitement

Exemple de code

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 recherche d’entier n’est pas implémentée

Exemple de code

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 suppression de tableau n’est pas implémentée

Exemple de code

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

L’indexation avec un pas != 1 n’est pas encore implémentée

Exemple de code

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.

Exemple de code

import errno

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

CPython output:

MicroPython output:

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

json

Le module JSON ne lève pas d’exception lorsqu’un objet n’est pas sérialisable

Exemple de code

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

L’attribut environ n’est pas implémenté

Contournement : Utilisez getenv, putenv et unsetenv

Exemple de code

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 retourne la valeur réelle plutôt que la valeur mise en cache

Cause : L’attribut environ n’est pas implémenté

Exemple de code

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

La méthode getrandbits ne peut retourner qu’un maximum de 32 bits à la fois.

Cause : L’état interne du PRNG n’est que de 32 bits, il ne peut donc retourner qu’un maximum de 32 bits de données à la fois.

Contournement : Si vous avez besoin d’un nombre de plus de 32 bits, utilisez le module random de micropython-lib.

Exemple de code

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

La méthode randint ne peut retourner qu’un entier d’au plus la taille du mot natif.

Cause : Le PRNG ne peut générer que 32 bits d’état à la fois. Le résultat est ensuite converti en un int de taille native plutôt qu’en un objet int complet.

Contournement : Si vous avez besoin d’entiers plus grands que la taille du mot natif, utilisez le module random de micropython-lib.

Exemple de code

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

Exemple de code

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

Exemple de code

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

Cause : MicroPython est optimisé pour la taille du code.

Contournement : N’utilisez pas d’espaces dans les chaînes de format.

Exemple de code

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

Le remplacement de sys.stdin, sys.stdout et sys.stderr n’est pas possible

Cause : Ils sont stockés en mémoire morte (lecture seule).

Exemple de code

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'