所有异常都具有可读性value
和errno
属性,而不仅仅是StopIteration
和OSError
。
**原因:**MicroPython经过优化以减小代码大小。
**解决方法:**只使用value
上StopIteration
的异常,合并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的切片分配不支持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对象支持.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.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
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )