Modules¶
Generated Fri 19 Jun 2026 22:08:45 UTC
Uitsluitend positionele parameters¶
Om coderuimte te besparen accepteren veel functies die in CPython sleutelwoordargumenten accepteren, in MicroPython alleen positionele argumenten.
MicroPython markeert uitsluitend positionele parameters op dezelfde manier als CPython, door een / in te voegen om het einde van de positionele parameters aan te geven. Elke functie waarvan de handtekening eindigt op / accepteert uitsluitend positionele argumenten. Zie voor meer informatie PEP 570.
Voorbeeld¶
In CPython 3.4 is dit bijvoorbeeld de handtekening van de constructor socket.socket:
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
De handtekening die is gedocumenteerd in MicroPython is echter:
socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /)
De / aan het einde van de parameters geeft aan dat ze in MicroPython allemaal uitsluitend positioneel zijn. De volgende code werkt in CPython maar niet in de meeste MicroPython-ports:
import socket
s = socket.socket(type=socket.SOCK_DGRAM)
MicroPython zal een uitzondering genereren:
TypeError: function doesn't take keyword arguments
De volgende code werkt zowel in CPython als in MicroPython:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
array¶
Vergelijking tussen verschillende typecodes wordt niet ondersteund¶
Oorzaak: Codeomvang
Oplossing: Vergelijk afzonderlijke elementen
Voorbeeldcode:
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:
|
Overloopcontrole is niet geïmplementeerd¶
Oorzaak: MicroPython implementeert impliciete afkapping om de codeomvang en uitvoeringstijd te verkleinen
Oplossing: Als CPython-compatibiliteit vereist is, maskeer de waarde dan expliciet
Voorbeeldcode:
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])
|
Zoeken naar gehele getallen is niet geïmplementeerd¶
Voorbeeldcode:
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:
|
Array-verwijdering is niet geïmplementeerd¶
Voorbeeldcode:
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
|
Subscript met stap != 1 is nog niet geïmplementeerd¶
Voorbeeldcode:
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.
Voorbeeldcode:
import errno
print(f"{errno.errorcode[errno.EOPNOTSUPP]=!s}")
CPython output: | MicroPython output: |
errno.errorcode[errno.EOPNOTSUPP]=ENOTSUP
| errno.errorcode[errno.EOPNOTSUPP]=EOPNOTSUPP
|
json¶
De JSON-module gooit geen uitzondering wanneer een object niet serialiseerbaar is¶
Voorbeeldcode:
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¶
Het attribuut environ is niet geïmplementeerd¶
Oplossing: Gebruik getenv, putenv en unsetenv
Voorbeeldcode:
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 retourneert de werkelijke waarde in plaats van de gecachte waarde¶
Oorzaak: Het attribuut environ is niet geïmplementeerd
Voorbeeldcode:
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¶
De methode getrandbits kan maximaal 32 bits tegelijk teruggeven.¶
Oorzaak: De interne toestand van de PRNG is slechts 32 bits, waardoor maximaal 32 bits aan gegevens tegelijk kunnen worden teruggegeven.
Oplossing: Als u een getal nodig heeft met meer dan 32 bits, gebruik dan de random-module uit micropython-lib.
Voorbeeldcode:
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
|
De methode randint kan alleen een geheel getal teruggeven van maximaal de native woordgrootte.¶
Oorzaak: De PRNG kan slechts 32 bits toestand tegelijk genereren. Het resultaat wordt vervolgens omgezet naar een native int in plaats van een volledig int-object.
Oplossing: Als u gehele getallen groter dan de native woordgrootte nodig heeft, gebruik dan de random-module uit micropython-lib.
Voorbeeldcode:
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¶
Voorbeeldcode:
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¶
Voorbeeldcode:
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¶
Oorzaak: MicroPython is geoptimaliseerd voor codeomvang.
Oplossing: Gebruik geen spaties in formaatreeksen.
Voorbeeldcode:
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¶
Het overschrijven van sys.stdin, sys.stdout en sys.stderr is niet mogelijk¶
Oorzaak: Ze zijn opgeslagen in alleen-lezengeheugen.
Voorbeeldcode:
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'
|