Módulos#
Generated Mon 03 Aug 2026 05:40:41 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: |
11947790255791459587
| 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=340282366920938463463374607431768211455
| 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'
|