模块¶
Generated Wed 14 Aug 2024 09:10:45 UTC
array¶
不支持不同类型代码的比较¶
解决方法: 逐个比较元素
示例代码:
import array
array.array("b", [1, 2]) == array.array("i", [1, 2])
CPy输出: |
uPy输出: |
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
溢出检查未实现¶
原因: MicroPython 实现了隐式截断以减小代码大小和执行时间
解决方法: 如果需要兼容 CPython,则显式地对值进行掩码处理
示例代码:
import array
a = array.array("b", [257])
print(a)
CPy输出: |
uPy输出: |
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
OverflowError: signed char is greater than maximum
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
查找整数未实现¶
示例代码:
import array
print(1 in array.array("B", b"12"))
CPy输出: |
uPy输出: |
False
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
未实现数组删除¶
示例代码:
import array
a = array.array("b", (1, 2, 3))
del a[1]
print(a)
CPy输出: |
uPy输出: |
array('b', [1, 3])
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
带步长的下标!=1尚未实现¶
示例代码:
import array
a = array.array("b", (1, 2, 3))
print(a[3:2:2])
CPy输出: |
uPy输出: |
array('b')
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
内置¶
next() 方法的第二个参数未实现¶
原因: MicroPython 优化了代码空间。
解决方法: 使用以下代码替代 val = next(it, deflt)
:
try:
val = next(it)
except StopIteration:
val = deflt
示例代码:
print(next(iter(range(0)), 42))
CPy输出: |
uPy输出: |
42
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
deque¶
未实现 deque¶
解决方法: 使用普通列表。micropython-lib 中有 collections.deque 的实现。
示例代码:
import collections
D = collections.deque()
print(D)
CPy输出: |
uPy输出: |
deque([])
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
json¶
当对象不可序列化时,JSON 模块不会抛出异常¶
示例代码:
import json
a = bytes(x for x in range(256))
try:
z = json.dumps(a)
x = json.loads(z)
print("Should not get here")
except TypeError:
print("TypeError")
CPy输出: |
uPy输出: |
TypeError
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
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"))
CPy输出: |
uPy输出: |
None
VALUE
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
getenv
返回实际值而不是缓存值¶
原因: environ
属性未实现
示例代码:
import os
print(os.getenv("NEW_VARIABLE"))
os.putenv("NEW_VARIABLE", "VALUE")
print(os.getenv("NEW_VARIABLE"))
CPy输出: |
uPy输出: |
None
None
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
random¶
getrandbits
方法一次只能返回最多 32 位。¶
原因: PRNG 的内部状态只有 32 位,因此一次只能返回最多 32 位的数据。
解决方法: 如果需要超过 32 位的数字,则使用 micropython-lib 中的 random 模块。
示例代码:
import random
x = random.getrandbits(64)
print("{}".format(x))
CPy输出: |
uPy输出: |
5508857504329707343
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
randint
方法只能返回一个最多为本地字大小的整数。¶
原因: PRNG 一次只能生成 32 位的状态。然后将结果转换为本地大小的 int,而不是完整的 int 对象。
解决方法: 如果需要大于本地字大小的整数,请使用 micropython-lib 中的 random 模块。
示例代码:
import random
x = random.randint(2**128 - 1, 2**128)
print("x={}".format(x))
CPy输出: |
uPy输出: |
x=340282366920938463463374607431768211456
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
struct¶
结构化打包参数过少,uPy 不会检查¶
示例代码:
import struct
try:
print(struct.pack("bb", 1))
print("Should not get here")
except:
print("struct.error")
CPy输出: |
uPy输出: |
struct.error
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
结构化打包参数过多,uPy 不会检查¶
示例代码:
import struct
try:
print(struct.pack("bb", 1, 2, 3))
print("Should not get here")
except:
print("struct.error")
CPy输出: |
uPy输出: |
struct.error
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
结构化打包格式中包含空格,CPython 忽略空格,uPy 报错¶
原因: MicroPython 优化了代码空间。
解决方法: 不要在格式字符串中使用空格。
示例代码:
import struct
try:
print(struct.pack("b b", 1, 2))
print("Should have worked")
except:
print("struct.error")
CPy输出: |
uPy输出: |
b'\x01\x02'
Should have worked
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|
sys¶
无法覆盖 sys.stdin、sys.stdout 和 sys.stderr¶
原因: 它们存储在只读内存中。
示例代码:
import sys
sys.stdin = None
print(sys.stdin)
CPy输出: |
uPy输出: |
None
|
/bin/sh: 1: ../ports/unix/build-standard/micropython: not found
|