20 Star 82 Fork 22

黑胡桃实验室 BlackWalnut Labs. / Waffle NanoV1 Python API Doc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 8.64 KB
一键复制 编辑 原始数据 按行查看 历史
诌在行 提交于 2021-07-01 11:49 . update readme

内置类型

异常

  所有异常都具有可读性valueerrno属性,而不仅仅是StopIterationOSError

  **原因:**MicroPython经过优化以减小代码大小。

  **解决方法:**只使用valueStopIteration的异常,合并errno异常在OSError异常上。不要在其他异常上使用或依赖这些属性。

  示例:

>>> e = Exception(1)
>>> print(e.value)
Traceback (most recent call last):
  File "<stdin>", in <module>
AttributeError: no such attribute
>>> print(e.errno)
Traceback (most recent call last):
  File "<stdin>", in <module>
AttributeError: no such attribute

触发异常

  示例:

>>> try:#抛出类型异常TypeError
...     raise TypeError
... except TypeError:#捕捉类型异常TypeError
...     raise ValueError
...     
...     
... 
Traceback (most recent call last):
  File "<stdin>", in <module>
ValueError: 

**不支持用户定义内置异常的属性 **

  **原因:**MicroPython已针对内存使用进行了高度优化。

  **解决方法:**使用用户定义的异常子类。

  示例:

>>> e = Exception()
>>> e.x = 0#定义内置异常属性失败
Traceback (most recent call last):
  File "<stdin>", in <module>
AttributeError: no such attribute

while循环条件中可能具有不期望的行号的异常

  原因:优化了条件检查以使其在循环主体的末尾进行,并报告该行号。

  示例:

>>> l = ["-foo", "-bar"]
>>> i = 0
>>> while l[i][0] == "-":
...     print("iter")
...     i += 1
...     
...     
... 
iter
iter
Traceback (most recent call last):
  File "<stdin>", in <module>
IndexError: index out of range

Exception .__ init__方法不存在

  **原因:**MicroPython不完全支持对本机类进行子类化。

  **解决方法:**改用super()呼叫:

  示例:

>>> class A(Exception):
...     def __init__(self):
...         Exception.__init__(self)#采用Exception .__ init__方法
...         
...         
... 
>>> a = A()#实例化失败,因为Exception .__ init__方法不存在
Traceback (most recent call last):
  File "<stdin>", in <module>
  File "<stdin>", in __init__
AttributeError: no such attribute

>>> class A(Exception):
...     def __init__(self):
...         super().__init__()#采用`super()`呼叫
...         
...         
... 
>>> a = A()#实例化成功,不报错

bytearray

bytearray的切片分配不支持RHS

  示例:

>>> b = bytearray(4)
>>> b[0:1] = [1, 2]#bytearray的切片赋值,引发异常
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError: array/bytes required on right side

bytes

  bytes对象支持.format()方法

  **原因:**MicroPython努力变得更常规,所以如果[str]和[bytes]支持__mod__()(%运算符),这两个看起来都支持format()。bytes对象支持__mod__ ,但是bytes对象使用format()格式,__mod__ 就编译不出来了

  **解决方法:**如果对CPython兼容性感兴趣,请不要在bytes对象上使用.format()

  示例:

>>> print(b"{}".format(1))#str对象使用format()
b'1'

bytes()具有不能实现的关键字

  **解决方法:**将编码作为位置参数传递,例如print(bytes('abc', 'utf-8'))

  示例:

>>> print(bytes("abc", encoding="utf8"))#将编码作为bytes()位置参数传递,出现异常
Traceback (most recent call last):
  File "<stdin>", in <module>
TypeError: wrong number of arguments

bytes切片步长!= 1时无法实现

  **原因:**MicroPython已针对内存使用进行了高度优化。

  **解决方法:**对此显着的操作使用显式循环。

  示例:

>>> print(b"123"[0:3:2])
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError: only slices with step=1 (aka None) are supported

字典

  字典的键不是集合。

  **原因:**不能实现。

  **解决方法:**在使用集合操作之前,将键显式转换为集合。

  示例:

>>> print({1: 2, 3: 4}.keys() & {1})
Traceback (most recent call last):
  File "<stdin>", in <module>
TypeError: unsupported type for operator

浮点数

  示例:

>>> print("%.1g" % -9.9)
-10

整型

  int不能对int派生类型转换

  **解决方法:**除非确实需要,否则避免对内置类型进行子类化。

  示例:

>>> class A(int):
...     __add__ = lambda self, other: A(int(self) + other)
...     
...     
... 
>>> a = A(42)
>>> print(a + a)
Traceback (most recent call last):
  File "<stdin>", in <module>
  File "<stdin>", in <lambda>
TypeError: unsupported type for operator

列表

列表删除时步长!= 1不能实施

  **解决方法:**对此使用循环操作。

  示例:

>>> l = [1, 2, 3, 4]
>>> del l[0:4:2]#列表删除时步长!= 1,失败
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError:

列表分片存储在可迭代的RHS上不能实现

  **原因:**RHS被限制为元组或列表

  **解决方法:**在RHS上使用list(<iter>),将可迭代对象转换为列表

  示例:

>>> l = [10, 20]
>>> l[0:1] = range(4)# RHS不能是是可迭代对象
Traceback (most recent call last):
  File "<stdin>", in <module>
TypeError: expected tuple/list

**列表存储时步长!= 1不能实现

  **解决方法:**对此操作直接使用循环。

  示例:

>>> l = [1, 2, 3, 4]
>>> l[0:4:2] = [5, 6]#列表存储时步长= 2不能实现
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError:

str

  不支持开始/结束索引,例如str.endswith(s,start)

  示例:

>>> print("abc".endswith("c", 1))
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError: start/end indices

**不支持属性/子字符串

  示例:

>>> print("{a[0]}".format(a=[1, 2]))
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError: attributes not supported yet

**str(…)不支持关键字参数

  **解决方法:**直接输入编码格式。例如print(bytes('abc', 'utf-8'))

  示例:

>>> print(str(b"abc", encoding="utf8"))#str不支持关键字参数
Traceback (most recent call last):
  File "<stdin>", in <module>
TypeError: argument num/types mismatch

**不支持str.ljust()和str.rjust()

  **原因:**MicroPython已针对内存使用进行了高度优化。提供简单的解决方法。

  **解决方法:**使用 "%-10s" % s代替s.ljust(10),使用"% 10s" % s代替s.rjust(10),同样可以使用"{:<10}".format(s) 或者 "{:>10}".format(s)

  示例:

>>> print("abc".ljust(10))#不支持str.ljust()
Traceback (most recent call last):
  File "<stdin>", in <module>
AttributeError: no such attribute

**None作为rsplit的第一个参数,例如str.rsplit(None,n)不支持

  示例:

>>> print("a a a".rsplit(None, 1))#不支持str.rsplit(None,n)
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError: rsplit(None,n)

**下标的步长!= 1不能实现

  示例:

>>> print("abcdefghi"[0:9:2])
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError: only slices with step=1 (aka None) are supported

元组

  元组的步长!= 1不能实现

  示例:

>>> print((1, 2, 3, 4)[0:4:2])
Traceback (most recent call last):
  File "<stdin>", in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
Python
1
https://gitee.com/blackwalnutlabs/waffle_nano_v1_python_api_document.git
git@gitee.com:blackwalnutlabs/waffle_nano_v1_python_api_document.git
blackwalnutlabs
waffle_nano_v1_python_api_document
Waffle NanoV1 Python API Doc
master

搜索帮助