Módulos¶
Generated Fri 19 Jun 2026 22:08:45 UTC
Parâmetros somente posicionais¶
Para economizar espaço de código, muitas funções que aceitam argumentos nomeados no CPython aceitam apenas argumentos posicionais no MicroPython.
MicroPython marca parâmetros somente posicionais da mesma forma que CPython, inserindo / para marcar o fim dos parâmetros posicionais. Qualquer função cuja assinatura termina em / aceita apenas argumentos posicionais. Para mais detalhes, veja PEP 570.
Exemplo¶
Por exemplo, no CPython 3.4 esta é a assinatura do construtor socket.socket:
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
No entanto, a assinatura documentada em MicroPython é:
socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /)
O / ao final dos parâmetros indica que todos são somente posicionais no MicroPython. O código a seguir funciona no CPython, mas não na maioria dos ports do MicroPython:
import socket
s = socket.socket(type=socket.SOCK_DGRAM)
MicroPython lançará uma exceção:
TypeError: function doesn't take keyword arguments
O código a seguir funcionará tanto no CPython quanto no MicroPython:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
array¶
Comparação entre typecodes diferentes não suportada¶
Causa: Tamanho do código
Solução alternativa: Compare elementos individuais
Código de exemplo:
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:
|
Verificação de overflow não implementada¶
Causa: MicroPython implementa truncamento implícito para reduzir o tamanho do código e o tempo de execução
Solução alternativa: Se a compatibilidade com CPython for necessária, aplique uma máscara ao valor explicitamente
Código de exemplo:
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])
|
Busca por inteiro não implementada¶
Código de exemplo:
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:
|
Exclusão de array não implementada¶
Código de exemplo:
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
|
Subscrito com passo != 1 ainda não implementado¶
Código de exemplo:
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 exemplo:
import errno
print(f"{errno.errorcode[errno.EOPNOTSUPP]=!s}")
CPython output: | MicroPython output: |
errno.errorcode[errno.EOPNOTSUPP]=ENOTSUP
| errno.errorcode[errno.EOPNOTSUPP]=EOPNOTSUPP
|
json¶
O módulo JSON não lança exceção quando o objeto não é serializável¶
Código de exemplo:
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¶
O atributo environ não está implementado¶
Solução alternativa: Use getenv, putenv e unsetenv
Código de exemplo:
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 retorna o valor real em vez do valor em cache¶
Causa: O atributo environ não está implementado
Código de exemplo:
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¶
O método getrandbits pode retornar no máximo 32 bits por vez.¶
Causa: O estado interno do PRNG tem apenas 32 bits, portanto só pode retornar no máximo 32 bits de dados por vez.
Solução alternativa: Se você precisar de um número com mais de 32 bits, utilize o módulo random da micropython-lib.
Código de exemplo:
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
|
O método randint pode retornar apenas um inteiro de no máximo o tamanho nativo da palavra.¶
Causa: O PRNG só consegue gerar 32 bits de estado por vez. O resultado é então convertido para um int de tamanho nativo, em vez de um objeto int completo.
Solução alternativa: Se você precisar de inteiros maiores que o tamanho nativo da palavra, use o módulo random da micropython-lib.
Código de exemplo:
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 exemplo:
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 exemplo:
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 é otimizado para tamanho de código.
Solução alternativa: Não use espaços em strings de formato.
Código de exemplo:
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¶
Não é possível substituir sys.stdin, sys.stdout e sys.stderr¶
Causa: Eles são armazenados na memória somente leitura.
Código de exemplo:
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'
|