モジュール

Generated Fri 19 Jun 2026 22:08:45 UTC

位置専用パラメータ

コードサイズを節約するため、CPython でキーワード引数を受け付ける多くの関数が、MicroPython では位置引数のみを受け付けます。

MicroPython は CPython と同じ方法で位置専用パラメータを示します。位置パラメータの終わりを示すために / を挿入します。シグネチャが / で終わる関数は 位置引数のみ を受け取ります。詳細については PEP 570 を参照してください。

たとえば、CPython 3.4 では socket.socket コンストラクターのシグネチャは次のとおりです:

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

一方、MicroPython でドキュメント化されているシグネチャは:

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

パラメータの末尾の / は、MicroPython ではすべてが位置専用であることを示します。以下のコードは CPython では動作しますが、ほとんどの MicroPython ポートでは動作しません:

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

MicroPython は例外を発生させます:

TypeError: function doesn't take keyword arguments

以下のコードは CPython と MicroPython の両方で動作します:

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

array

異なる型コード間の比較はサポートされていません

原因: コードサイズ

回避策: 個々の要素を比較してください

サンプルコード:

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:

オーバーフローチェックは実装されていません

原因: MicroPython はコードサイズと実行時間を削減するために暗黙の切り捨てを実装しています

回避策: CPython との互換性が必要な場合は、値を明示的にマスクしてください

サンプルコード:

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

整数の検索は実装されていません

サンプルコード:

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:

配列の削除は実装されていません

サンプルコード:

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

ステップが 1 以外のサブスクリプションはまだ実装されていません

サンプルコード:

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.

サンプルコード:

import errno

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

CPython output:

MicroPython output:

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

json

JSON モジュールはオブジェクトがシリアライズできない場合に例外を発生させません

サンプルコード:

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

environ 属性は実装されていません

回避策: getenvputenvunsetenv を使用してください

サンプルコード:

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 はキャッシュされた値の代わりに実際の値を返します

原因: environ 属性は実装されていません

サンプルコード:

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

getrandbits メソッドは一度に最大 32 ビットしか返せません。

原因: PRNG の内部状態は 32 ビットのみであるため、一度に返せるデータは最大 32 ビットです。

回避策: 32 ビットを超える数値が必要な場合は、micropython-lib の random モジュールを利用してください。

サンプルコード:

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

randint メソッドはネイティブワードサイズ以下の整数しか返せません。

原因: PRNG は一度に 32 ビットの状態しか生成できません。その結果は完全な int オブジェクトではなく、ネイティブサイズの int にキャストされます。

回避策: ネイティブワードサイズより大きい整数が必要な場合は、micropython-lib の random モジュールを使用してください。

サンプルコード:

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

サンプルコード:

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

サンプルコード:

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

原因: MicroPython はコードサイズを削減するよう最適化されています。

回避策: フォーマット文字列にスペースを使用しないでください。

サンプルコード:

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

sys.stdin、sys.stdout、sys.stderr のオーバーライドはできません

原因: それらは読み取り専用メモリに格納されています。

サンプルコード:

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'