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'