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