モジュール¶
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 属性は実装されていません¶
回避策: getenv、putenv、unsetenv を使用してください
サンプルコード:
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'
|