組込み型
Generated Sat 08 Aug 2026 01:23:30 UTC
例外
すべての例外には可視な value と errno の属性がある。 StopIteration と OSError に限らない。
原因: MicroPython はコードサイズを削減するよう最適化されています。
回避策: StopIteration 例外では value のみを使い、 OSError 例外では errno のみを使います。他の例外では、これらの属性を使ったり依存したりしないでください。
サンプルコード:
e = Exception(1)
print(e.value)
print(e.errno)
CPython 出力: |
MicroPython 出力 |
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
AttributeError: 'Exception' object has no attribute 'value'
|
1
1
|
例外チェーンは実装されていない
サンプルコード:
try:
raise TypeError
except TypeError:
raise ValueError
CPython 出力: |
MicroPython 出力 |
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
TypeError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 11, in <module>
ValueError
|
Traceback (most recent call last):
File "<stdin>", line 11, in <module>
ValueError:
|
組込み例外のユーザ定義属性はサポートされない
原因: MicroPython はメモリ使用量について高度に最適化しています。
回避策: ユーザ定義の例外サブクラスを使ってください。
サンプルコード:
e = Exception()
e.x = 0
print(e.x)
CPython 出力: |
MicroPython 出力 |
0
|
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
AttributeError: 'Exception' object has no attribute 'x'
|
while ループ条件での例外は予期しない行番号になる
原因: 条件チェックはループ本体の最後で実行されるように最適化されているので、その行番号が報告されます。
サンプルコード:
l = ["-foo", "-bar"]
i = 0
while l[i][0] == "-":
print("iter")
i += 1
CPython 出力: |
MicroPython 出力 |
iter
iter
Traceback (most recent call last):
File "<stdin>", line 11, in <module>
IndexError: list index out of range
|
iter
iter
Traceback (most recent call last):
File "<stdin>", line 13, in <module>
IndexError: list index out of range
|
Exception.__init__ メソッドは存在しない
原因: ネイティブクラスのサブクラス化は、Micropython で完全にはサポートされていません。
回避策: 代わりに、次のように super() を使って呼出してください。
class A(Exception):
def __init__(self):
super().__init__()
サンプルコード:
class A(Exception):
def __init__(self):
Exception.__init__(self)
a = A()
CPython 出力: |
MicroPython 出力 |
Traceback (most recent call last):
File "<stdin>", line 18, in <module>
File "<stdin>", line 15, in __init__
AttributeError: type object 'Exception' has no attribute '__init__'
|
OSError
OSError コンストラクタは、関連するサブタイプではなく、すべての errno 値に対してそのままの OSError を返す
原因: MicroPython には CPython 標準の OSError サブクラスが含まれていません。
回避策: OSError をキャッチし、その errno 属性を使って原因を特定してください。
サンプルコード:
import errno
errno_list = [ # つまり micropython が実装している集合
errno.EPERM,
errno.ENOENT,
errno.EIO,
errno.EBADF,
errno.EAGAIN,
errno.ENOMEM,
errno.EACCES,
errno.EEXIST,
errno.ENODEV,
errno.EISDIR,
errno.EINVAL,
errno.EOPNOTSUPP,
errno.EADDRINUSE,
errno.ECONNABORTED,
errno.ECONNRESET,
errno.ENOBUFS,
errno.ENOTCONN,
errno.ETIMEDOUT,
errno.ECONNREFUSED,
errno.EHOSTUNREACH,
errno.EALREADY,
errno.EINPROGRESS,
]
def errno_output_type(n):
try:
raise OSError(n, "")
except OSError as e:
return f"{type(e).__name__}"
except Exception as e:
return f"non-OSError {type(e).__name__}"
else:
return "no error"
for n in errno_list:
print(errno.errorcode[n], "=", errno_output_type(n))
CPython 出力: |
MicroPython 出力 |
EPERM = PermissionError
ENOENT = FileNotFoundError
EIO = OSError
EBADF = OSError
EAGAIN = BlockingIOError
ENOMEM = OSError
EACCES = PermissionError
EEXIST = FileExistsError
ENODEV = OSError
EISDIR = IsADirectoryError
EINVAL = OSError
EOPNOTSUPP = OSError
EADDRINUSE = OSError
ECONNABORTED = ConnectionAbortedError
ECONNRESET = ConnectionResetError
ENOBUFS = OSError
ENOTCONN = OSError
ETIMEDOUT = TimeoutError
ECONNREFUSED = ConnectionRefusedError
EHOSTUNREACH = OSError
EALREADY = BlockingIOError
EINPROGRESS = BlockingIOError
|
EPERM = OSError
ENOENT = OSError
EIO = OSError
EBADF = OSError
EAGAIN = OSError
ENOMEM = OSError
EACCES = OSError
EEXIST = OSError
ENODEV = OSError
EISDIR = OSError
EINVAL = OSError
EOPNOTSUPP = OSError
EADDRINUSE = OSError
ECONNABORTED = OSError
ECONNRESET = OSError
ENOBUFS = OSError
ENOTCONN = OSError
ETIMEDOUT = OSError
ECONNREFUSED = OSError
EHOSTUNREACH = OSError
EALREADY = OSError
EINPROGRESS = OSError
|
bytearray
配列スライスへの代入はサポートされない
サンプルコード:
b = bytearray(4)
b[0:1] = [1, 2]
print(b)
CPython 出力: |
MicroPython 出力 |
bytearray(b'\x01\x02\x00\x00\x00')
|
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
NotImplementedError: array/bytes required on right side
|
bytes
bytes.decode() は、エンコード引数として 'utf8', 'utf-8', 'ascii' のみをサポート。 'latin-1' などの他のエンコードはサポートしていない。 'UTF8' などの他の文字列形式もサポートしていない。
原因: MicroPython は組み込みシステム向けに最適化されており、メモリとコードサイズを節約するために、UTF-8 と ASCII コーデックのみをサポートし、単純なマッチングのみを行っています。 str コンストラクタにも同じ制限が適用されます 。 Unicode のサポート も参照してください。
回避策: 処理前にデータをUTF-8に変換するか、必要に応じてカスタムエンコード/デコードを実装してください。エンコード引数が許容される形式のいずれかであることを確認してください。
サンプルコード:
# CPython と MicroPython のどちらも utf8 と ascii のエンコーディングをサポートしています
print(b"caf\xc3\xa9".decode("utf8")) # codespell:ignore caf
print(b"cafe".decode("ascii"))
# MicroPython はそれ以外のエンコーディングをサポートしていません
try:
b"\xe9".decode("latin-1") # latin-1 での 'é'
print("latin-1 supported")
except (ValueError, NotImplementedError, LookupError) as e:
print("latin-1 not supported:", type(e).__name__)
try:
b"\x80".decode("cp1252") # cp1252 でのユーロ記号
print("cp1252 supported")
except (ValueError, NotImplementedError, LookupError) as e:
print("cp1252 not supported:", type(e).__name__)
# MicroPython ではエンコーディングの引数が厳密に一致している必要があります
try:
b"hello".decode("ASCII")
print("Capital letters ASCII supported")
except (ValueError, NotImplementedError, LookupError) as e:
print("Capital letters ASCII not supported:", type(e).__name__)
CPython 出力: |
MicroPython 出力 |
café
cafe
latin-1 supported
cp1252 supported
Capital letters ASCII supported
|
café
cafe
latin-1 not supported: LookupError
cp1252 not supported: LookupError
Capital letters ASCII not supported: LookupError
|
bytes.decode() はキーワード引数を受け付けず、位置引数のみを受け付ける
原因: MicroPythonはコードサイズを最適化するため、bytes.decode() のキーワード引数処理を実装していません。
回避策: キーワード引数の代わりに位置引数を使ってください。
サンプルコード:
# CPython はキーワード引数を受け付けますが、MicroPython は位置引数のみを受け付けます
b = b"hello\xffworld"
try:
# キーワード引数を使う
result = b.decode(encoding="utf-8", errors="ignore")
print("kwargs supported:", repr(result))
except TypeError as e:
print("kwargs not supported: TypeError")
# 回避策: 位置引数を使う
result = b.decode("utf-8", "ignore")
print("positional args work:", repr(result))
CPython 出力: |
MicroPython 出力 |
kwargs supported: 'helloworld'
|
kwargs not supported: TypeError
positional args work: 'helloworld'
|
bytes() コンストラクタは、エンコード引数として 'utf8', 'utf-8', 'ascii' のみをサポート。 'latin-1' などの他のエンコードはサポートしない。 'UTF8' などの他の文字列形式もサポートしない。
原因: MicroPython は組み込みシステム向けに最適化されており、コードサイズを節約するためにコーデックのサポートを制限しています。 str.encode() にも同様の制限が適用されます 。 Unicode のサポート も参照してください。
回避策: str.encode() または bytes() コンストラクタの結果を解析して、他のエンコード変換を手動で実装してください。
サンプルコード:
# CPython と MicroPython のどちらも、この絵文字を UTF-8 のバイト列にエンコードできます
print(bytes("😀", "utf8"))
# CPython と MicroPython のどちらも、この絵文字を ASCII のバイト列にはエンコードできません
try:
print(bytes("😀", "ascii"))
except UnicodeError:
print("UnicodeError")
# MicroPython はそれ以外のエンコーディングや文字列形式を受け付けません
try:
print(bytes("😀", "UTF-8"))
except LookupError:
print("LookupError")
CPython 出力: |
MicroPython 出力 |
b'\xf0\x9f\x98\x80'
UnicodeError
b'\xf0\x9f\x98\x80'
|
b'\xf0\x9f\x98\x80'
UnicodeError
LookupError
|
bytes オブジェクトが .format() メソッドをサポート
原因: MicroPython はより一貫性のある実装を目指しています。そのため str と bytes の両方が __mod__() (% 演算子)をサポートするのであれば、両方で format() をサポートするのも理にかなっています。また __mod__ のサポートはコンパイル時に外すこともでき、その場合 bytes の書式化には format() だけが残ります。
回避策: CPython との互換性にこだわるなら bytes オブジェクトに対して .format() を使わないでください。
サンプルコード:
print(b"{}".format(1))
CPython 出力: |
MicroPython 出力 |
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
AttributeError: 'bytes' object has no attribute 'format'
|
b'1'
|
bytes() のキーワード引数は未実装
回避策: エンコーディングは位置パラメータで渡してください。たとえば print(bytes('abc', 'utf-8')) のようにします。
サンプルコード:
print(bytes("abc", encoding="utf8"))
CPython 出力: |
MicroPython 出力 |
b'abc'
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: keyword argument(s) not implemented - use normal args instead
|
スライスのステップが1以外は未実装
原因: MicroPython はメモリ使用量について高度に最適化しています。
回避策: このまれな操作には明示的なループを使ってください。
サンプルコード:
print(b"123"[0:3:2])
CPython 出力: |
MicroPython 出力 |
b'13'
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
|
complex
MicroPythonの complex() 関数は、CPython では拒否されるような特定の誤った値を受け入れてしまう
原因: MicroPython はメモリ使用量について高度に最適化しています。
回避策: complex() の引数に非標準の複素数リテラルを指定しないでください。
MicroPython の complex() 関数では、実部と虚部の間にスペースがあっても符号のないリテラルを受け入れ、それをプラスとして解釈します。
サンプルコード:
try:
print(complex("1 1j"))
except ValueError:
print("ValueError")
CPython 出力: |
MicroPython 出力 |
ValueError
|
(1+1j)
|
dict
辞書キーのビューが集合として動作しない。
原因: 未実装。
回避策: 集合操作を使う前に、キーを明示的に集合に変換してください。
サンプルコード:
print({1: 2, 3: 4}.keys() & {1})
CPython 出力: |
MicroPython 出力 |
{1}
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
TypeError: unsupported types for __and__: 'dict_view', 'set'
|
float
MicroPython では数学演算の際にオブジェクトの暗黙の変換が可能ですが、CPythonではできない。
回避策: CPythonとの互換性のために、オブジェクトはfloat(obj)でラップすべき。
サンプルコード:
class Test:
def __float__(self):
return 0.5
print(2.0 * Test())
CPython 出力: |
MicroPython 出力 |
Traceback (most recent call last):
File "<stdin>", line 14, in <module>
TypeError: unsupported operand type(s) for *: 'float' and 'Test'
|
1.0
|
int
bit_length メソッドは存在しない。
原因: bit_length メソッドは未実装。
回避策: MicroPython ではこのメソッドを利用しない。
サンプルコード:
x = 255
print("{} is {} bits long.".format(x, x.bit_length()))
CPython 出力: |
MicroPython 出力 |
255 is 8 bits long.
|
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
AttributeError: 'int' object has no attribute 'bit_length'
|
int の派生型に対する int 変換は使えない
回避策: 本当に必要でない限り、組み込み型のサブクラス化は避けてください。 https://en.wikipedia.org/wiki/Composition_over_inheritance を推奨します。
サンプルコード:
class A(int):
__add__ = lambda self, other: A(int(self) + other)
a = A(42)
print(a + a)
CPython 出力: |
MicroPython 出力 |
84
|
Traceback (most recent call last):
File "<stdin>", line 14, in <module>
File "<stdin>", line 10, in <lambda>
TypeError: unsupported types for __radd__: 'int', 'int'
|
list
ステップが 1 以外のリスト要素の削除は未実装
回避策: このまれな操作には明示的なループを使ってください。
サンプルコード:
l = [1, 2, 3, 4]
del l[0:4:2]
print(l)
CPython 出力: |
MicroPython 出力 |
[2, 4]
|
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
NotImplementedError:
|
リストのスライスへのイテレーティブの代入は未実装
原因: 右辺はタプルかリストに制限されています。
回避策: イテレータブルをリストに変換するよう、右辺で list(<iter>) を使ってください。
サンプルコード:
l = [10, 20]
l[0:1] = range(4)
print(l)
CPython 出力: |
MicroPython 出力 |
[0, 1, 2, 3, 20]
|
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
TypeError: object 'range' isn't a tuple or list
|
ステップ 1 以外のリストスライスへの代入は未実装
回避策: このまれな操作には明示的なループを使ってください。
サンプルコード:
l = [1, 2, 3, 4]
l[0:4:2] = [5, 6]
print(l)
CPython 出力: |
MicroPython 出力 |
[5, 2, 6, 4]
|
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
NotImplementedError:
|
メモリービュー
memoryview のターゲットのリサイズは無効になる可能性がある
原因: CPythonは、memoryview オブジェクトが参照している間に bytearray や io.bytesIO オブジェクトのサイズ変更を防ぎます。MicroPythonでは、オブジェクトが memoryview で参照されている間にプログラマーが手動でリサイズしないようにする必要があります。
最悪のケースでは、memoryview のターゲットとなるオブジェクトをリサイズすると、memoryview が無効な解放されたメモリを参照する可能性があり(解放後使用バグ)、MicroPython のランタイムを破損させることがあります。
回避策: memoryview が割り当てられている bytearray または io.bytesIO オブジェクトのサイズを変更しないでください。
サンプルコード:
b = bytearray(b"abcdefg")
m = memoryview(b)
b.extend(b"hijklmnop")
print(b, bytes(m))
CPython 出力: |
MicroPython 出力 |
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
BufferError: Existing exports of data: object cannot be re-sized
|
bytearray(b'abcdefghijklmnop') b'abcdefg'
|
range
range 引数はマシンワード内に収まる必要がある。開始値または終了値が大きすぎると正しく動作しない。
原因: range 関数は引数をC言語の mp_int_t 型として格納し、中間計算でもこの型が使われるため。
回避策: そのような range 関数の使用を避けてください。
サンプルコード:
from sys import maxsize
# `maxsize-1` を含む range は作成できません
try:
print(range(-maxsize - 1, 0))
except OverflowError:
print("OverflowError")
# start や stop が [-maxsize, maxsize] の外にある range は、range 自体が小さくても作成できません。
try:
print(range(maxsize + 1, maxsize + 2))
except OverflowError:
print("OverflowError")
# `stop-start` が sys.maxsize を超える range では len() が正しくありません。一方 CPython では len() を計算できません。
try:
print(len(range(-maxsize, maxsize)))
except OverflowError:
print("OverflowError")
# `stop-start` が sys.maxsize を超える range では len() が正しくありません
try:
print(len(range(-maxsize, maxsize, maxsize)))
except OverflowError:
print("OverflowError")
CPython 出力: |
MicroPython 出力 |
range(-9223372036854775808, 0)
range(9223372036854775808, 9223372036854775809)
OverflowError
2
|
OverflowError
OverflowError
0
0
|
str
str.encode() コンストラクタは、エンコード引数として 'utf8', 'utf-8', 'ascii' のみをサポート。 'latin-1' などの他のエンコードはサポートしていない。また 'UTF8' などの他の文字列形式もサポートしていない。
原因: MicroPython は組み込みシステム向けに最適化されており、コードサイズを節約するためにコーデックのサポートを制限しています。 同様の制限はバイトコンストラクタにも適用しています 。 Unicode のサポート も参照してください。
回避策: str.encode() または bytes() コンストラクタの結果を解析して、エンコード変換を手動で実装してください。
サンプルコード:
# CPython と MicroPython のどちらも、この絵文字を UTF-8 のバイト列にエンコードできます
print("😀".encode("utf8"))
# CPython と MicroPython のどちらも、この絵文字を ASCII のバイト列にはエンコードできません
try:
print("😀".encode("ascii"))
except UnicodeError:
print("UnicodeError")
# MicroPython はそれ以外のエンコーディングや文字列形式を受け付けません:
try:
print("😀".encode("UTF-8"))
except LookupError:
print("LookupError")
CPython 出力: |
MicroPython 出力 |
b'\xf0\x9f\x98\x80'
UnicodeError
b'\xf0\x9f\x98\x80'
|
b'\xf0\x9f\x98\x80'
UnicodeError
LookupError
|
str.encode() および bytes() コンストラクタは、指定の errors 引数を無視する。エンコーディングが 'ascii' と指定されていて、文字列内に非 ASCII バイトが見つかった場合は、必ず例外が発生する。
原因: MicroPython は組み込みシステム向けに最適化されており、コードサイズを節約するためにコーデックのサポートが制限されています。 Unicode のサポート も参照してください。
回避策: str.encode() または bytes() コンストラクタの結果を解析して、エンコードエラーを手動で処理してください。
サンプルコード:
# CPython は絵文字を ASCII の '?' に置き換えますが、MicroPython は
# 例外を発生させます
try:
print("😀".encode("ascii", "replace"))
except UnicodeError:
print("UnicodeError")
# CPython は結果から絵文字を無視しますが、MicroPython は例外を発生させます
try:
print("😀".encode("ascii", "ignore"))
except UnicodeError:
print("UnicodeError")
CPython 出力: |
MicroPython 出力 |
b'?'
b''
|
UnicodeError
UnicodeError
|
str() コンストラクタは、エンコード引数として 'utf8', 'utf-8', "'ascii' のみをサポートしている。 'latin-1' などの他のエンコードはサポートしていない。また 'UTF8' などの他の文字列形式もサポートしていない。
原因: MicroPython は組み込みシステム向けに最適化されており、メモリとコードサイズを節約するために、UTF-8 と ASCII コーデックのみをサポートし、単純なマッチングのみを行っています。 bytes.decode() にも同様の制限が適用されます 。 Unicode のサポート も参照してください。
回避策: 処理前にデータをUTF-8に変換するか、必要に応じてカスタムエンコード/デコードを実装してください。エンコード引数が許容される形式のいずれかであることを確認してください。
サンプルコード:
# CPython と MicroPython のどちらも utf8 と ascii のエンコーディングをサポートしています
print(str(b"caf\xc3\xa9", "utf8")) # codespell:ignore caf
print(str(b"cafe", "ascii"))
# MicroPython はそれ以外のエンコーディングをサポートしていません
try:
str(b"\xe9", "latin-1") # latin-1 での 'é'
print("latin-1 supported")
except (ValueError, NotImplementedError, LookupError) as e:
print("latin-1 not supported:", type(e).__name__)
try:
str(b"\x80", "cp1252") # cp1252 でのユーロ記号
print("cp1252 supported")
except (ValueError, NotImplementedError, LookupError) as e:
print("cp1252 not supported:", type(e).__name__)
# MicroPython ではエンコーディングの引数が厳密に一致している必要があります
try:
str(b"hello", "ASCII")
print("Capital letters ASCII supported")
except (ValueError, NotImplementedError, LookupError) as e:
print("Capital letters ASCII not supported:", type(e).__name__)
CPython 出力: |
MicroPython 出力 |
café
cafe
latin-1 supported
cp1252 supported
Capital letters ASCII supported
|
café
cafe
latin-1 not supported: LookupError
cp1252 not supported: LookupError
Capital letters ASCII not supported: LookupError
|
MicroPython は CPython とは異なり、任意の基数で "," のグループ化オプションを受け入れる。
原因: コードサイズを削減するため、MicroPython はこの組み合わせに対してエラーを発行しません。
回避策: CPython との互換性が必要な場合は {:,b} のようなフォーマット文字列を使用しないでください。
サンプルコード:
try:
print("{:,b}".format(99))
except ValueError:
print("ValueError")
try:
print("{:,x}".format(99))
except ValueError:
print("ValueError")
try:
print("{:,o}".format(99))
except ValueError:
print("ValueError")
CPython 出力: |
MicroPython 出力 |
ValueError
ValueError
ValueError
|
110,0011
63
143
|
MicroPython は浮動小数点値の区切り文字として "," または "_" を受け入れるが、正しく実装していない
原因: コードサイズを削減するため、MicroPython はこの組み合わせを実装していません。そのため、桁区切り文字は数値の有効桁には表示されず、先頭のゼロの位置もずれてしまいます。
回避策: CPythonとの完全な互換性が必要な場合は {:,f} のような書式文字列を使用しないでください。
サンプルコード:
print("{:,f}".format(3141.159))
print("{:_f}".format(3141.159))
print("{:011,.2f}".format(3141.159))
print("{:011_.2f}".format(3141.159))
CPython 出力: |
MicroPython 出力 |
3,141.159000
3_141.159000
0,003,141.16
0_003_141.16
|
3141.159000
3141.159000
000,3141.16
0_003141.16
|
属性/添字は未実装
サンプルコード:
print("{a[0]}".format(a=[1, 2]))
CPython 出力: |
MicroPython 出力 |
1
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: attributes not supported
|
str(...) のキーワード引数は未実装
回避策: エンコーディングは位置パラメータで指定してください。たとえば print(bytes('abc', 'utf-8')) のようにします。
サンプルコード:
print(str(b"abc", encoding="utf8"))
CPython 出力: |
MicroPython 出力 |
abc
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: keyword argument(s) not implemented - use normal args instead
|
str.ljust() と str.rjust() は未実装
原因: MicroPython はメモリ使用量について高度に最適化しています。これは容易に回避できます。
回避策: s.ljust(10) の代わりに "%-10s" % s 、 s.rjust(10) の代わりに "% 10s" % s を使ってください。あるいは "{:<10}".format(s) や "{:>10}".format(s) を使ってください。
サンプルコード:
print("abc".ljust(10))
CPython 出力: |
MicroPython 出力 |
abc
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
AttributeError: 'str' object has no attribute 'ljust'
|
repr() は、一部の印刷不可能な Unicode 文字をエスケープシーケンスではなく文字そのものとして出力する場合がある
原因: MicroPython は、印刷可能な文字を判断するために簡略化されたヒューリスティックを使い、完全な Unicode 文字データベースを必要としないため、メモリを節約できます。U+0080 以上の文字(サロゲート文字を除く)は UTF-8 で出力されます。CPython は Unicode データベースを使って、非文字(各プレーンの U+FFFxなど)といった印刷不可能な文字を識別します。
回避策: 組み込み用途の場合は差異を受け入れるか、正確な制御が必要な場合は ascii() を使うか、手動でエスケープしてください。
サンプルコード:
# これらは CPython ではエスケープされますが MicroPython ではそのまま出力される非文字です
# ドキュメントの表で表示上の問題が起きないように16進で示しています
print("U+FFFF:", repr("\uffff").encode("utf-8").hex())
print("U+1FFFF:", repr("\U0001ffff").encode("utf-8").hex())
CPython 出力: |
MicroPython 出力 |
U+FFFF: 275c756666666627
U+1FFFF: 275c55303030316666666627
|
U+FFFF: 27efbfbf27
U+1FFFF: 27f09fbfbf27
|
str.rsplit(None, n) のように rsplit の第1引数を None にするのは未実装
サンプルコード:
print("a a a".rsplit(None, 1))
CPython 出力: |
MicroPython 出力 |
['a a', 'a']
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: rsplit(None,n)
|
ステップが 1 でないスライスは未実装
サンプルコード:
print("abcdefghi"[0:9:2])
CPython 出力: |
MicroPython 出力 |
acegi
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
|
tuple
ステップが 1 でないタプルのスライスは未実装
サンプルコード:
print((1, 2, 3, 4)[0:4:2])
CPython 出力: |
MicroPython 出力 |
(1, 3)
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
|