Các module

Generated Thu 18 Jun 2026 14:23:40 UTC

Tham số chỉ theo vị trí (Positional-only Parameters)

Để tiết kiệm kích thước mã, nhiều hàm chấp nhận đối số từ khóa trong CPython chỉ chấp nhận đối số vị trí trong MicroPython.

MicroPython đánh dấu các tham số chỉ theo vị trí theo cùng cách với CPython, bằng cách chèn / để đánh dấu cuối các tham số vị trí. Bất kỳ hàm nào có chữ ký kết thúc bằng / chỉ nhận các đối số vị trí. Để biết thêm chi tiết, xem PEP 570.

Ví dụ

Ví dụ, trong CPython 3.4, đây là chữ ký của constructor socket.socket

socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

Tuy nhiên, chữ ký được ghi lại trong MicroPython là:

socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /)

Dấu / ở cuối các tham số chỉ ra rằng tất cả chúng đều chỉ theo vị trí trong MicroPython. Đoạn mã sau hoạt động trong CPython nhưng không hoạt động trong hầu hết các cổng MicroPython:

import socket
s = socket.socket(type=socket.SOCK_DGRAM)

MicroPython sẽ báo lỗi ngoại lệ:

TypeError: function doesn't take keyword arguments

Đoạn mã sau sẽ hoạt động trong cả CPython và MicroPython:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

array

So sánh giữa các typecode khác nhau không được hỗ trợ

Nguyên nhân: Kích thước mã

Cách khắc phục: So sánh các phần tử riêng lẻ

Mã ví dụ:

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:

Kiểm tra tràn số chưa được triển khai

Nguyên nhân: MicroPython triển khai cắt bớt ngầm định để giảm kích thước mã và thời gian thực thi

Cách khắc phục: Nếu cần tương thích với CPython thì che mặt nạ giá trị một cách tường minh

Mã ví dụ:

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])

Tìm kiếm số nguyên chưa được triển khai

Mã ví dụ:

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:

Xóa mảng chưa được triển khai

Mã ví dụ:

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

Đăng ký với bước != 1 chưa được triển khai

Mã ví dụ:

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.

Mã ví dụ:

import errno

print(f"{errno.errorcode[errno.EOPNOTSUPP]=!s}")

CPython output:

MicroPython output:

errno.errorcode[errno.EOPNOTSUPP]=ENOTSUP
errno.errorcode[errno.EOPNOTSUPP]=EOPNOTSUPP

json

Module JSON không báo lỗi ngoại lệ khi đối tượng không thể tuần tự hóa

Mã ví dụ:

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

Thuộc tính environ chưa được triển khai

Cách khắc phục: Sử dụng getenv, putenvunsetenv

Mã ví dụ:

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 trả về giá trị thực tế thay vì giá trị được lưu trong bộ nhớ đệm

Nguyên nhân: Thuộc tính environ chưa được triển khai

Mã ví dụ:

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

Phương thức getrandbits chỉ có thể trả về tối đa 32 bit mỗi lần.

Nguyên nhân: Trạng thái nội bộ của PRNG chỉ là 32 bit nên nó chỉ có thể trả về tối đa 32 bit dữ liệu mỗi lần.

Cách khắc phục: Nếu bạn cần một số có nhiều hơn 32 bit thì hãy sử dụng module random từ micropython-lib.

Mã ví dụ:

import random


x = random.getrandbits(64)
print("{}".format(x))

CPython output:

MicroPython output:

12327776399964966313
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
ValueError: bits must be 32 or less

Phương thức randint chỉ có thể trả về số nguyên tối đa bằng kích thước từ native.

Nguyên nhân: PRNG chỉ có thể tạo 32 bit trạng thái mỗi lần. Kết quả sau đó được chuyển đổi thành int có kích thước native thay vì đối tượng int đầy đủ.

Cách khắc phục: Nếu bạn cần số nguyên lớn hơn kích thước từ native, hãy sử dụng module random từ micropython-lib.

Mã ví dụ:

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

Mã ví dụ:

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

Mã ví dụ:

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

Nguyên nhân: MicroPython được tối ưu hóa cho kích thước mã.

Cách khắc phục: Không sử dụng khoảng trắng trong chuỗi định dạng.

Mã ví dụ:

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

Không thể ghi đè sys.stdin, sys.stdout và sys.stderr

Nguyên nhân: Chúng được lưu trữ trong bộ nhớ chỉ đọc.

Mã ví dụ:

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'