Builtin Types¶
Generated Fri 26 May 2017 09:18:36 UTC
Exception¶
Exception chaining not implemented
Sample code:
try:
raise TypeError
except TypeError:
raise ValueError
CPy output: | uPy output: |
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
TypeError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 10, in <module>
ValueError
|
Traceback (most recent call last):
File "<stdin>", line 10, in <module>
ValueError:
|
Assign instance variable to exception
Sample code:
e = Exception()
e.x = 0
print(e.x)
CPy output: | uPy output: |
0
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
AttributeError: 'Exception' object has no attribute 'x'
|
While loop guards will obscure exception line number reporting due to being optimised onto the end of the code block
Sample code:
l = ["-foo", "-bar"]
i = 0
while l[i][0] == "-":
print("iter")
i += 1
CPy output: | uPy output: |
iter
iter
Traceback (most recent call last):
File "<stdin>", line 10, in <module>
IndexError: list index out of range
|
iter
iter
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
IndexError: list index out of range
|
Exception.__init__ raises TypeError if overridden and called by subclass
Sample code:
class A(Exception):
def __init__(self):
Exception.__init__(self)
a = A()
CPy output: | uPy output: |
Traceback (most recent call last):
File "<stdin>", line 11, in <module>
File "<stdin>", line 9, in __init__
TypeError: argument should be a 'Exception' not a 'A'
|
bytearray¶
Array slice assignment with unsupported RHS
Sample code:
b = bytearray(4)
b[0:1] = [1, 2]
print(b)
CPy output: | uPy output: |
bytearray(b'\x01\x02\x00\x00\x00')
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError: array/bytes required on right side
|
bytes¶
bytes(...) with keywords not implemented
Workaround: Input the encoding format directly. eg. print(bytes('abc', 'utf-8'))
Sample code:
print(bytes('abc', encoding='utf8'))
CPy output: | uPy output: |
b'abc'
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: keyword argument(s) not yet implemented - use normal args instead
|
Bytes subscr with step != 1 not implemented
Sample code:
print(b'123'[0:3:2])
CPy output: | uPy output: |
b'13'
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
|
float¶
uPy and CPython outputs formats differ
Sample code:
print('%.1g' % -9.9)
print('%.1e' % 9.99)
print('%.1e' % 0.999)
CPy output: | uPy output: |
-1e+01
1.0e+01
1.0e+00
|
-10
1.00e+01
1.00e-00
|
int¶
No int conversion for int-derived types available
Sample code:
class A(int):
__add__ = lambda self, other: A(int(self) + other)
a = A(42)
print(a+a)
CPy output: | uPy output: |
84
|
Traceback (most recent call last):
File "<stdin>", line 11, in <module>
File "<stdin>", line 8, in <lambda>
TypeError: can't convert A to int
|
Incorrect error message when passing float into to_bytes
Sample code:
try:
int('1').to_bytes(1.0)
except TypeError as e:
print(e)
CPy output: | uPy output: |
integer argument expected, got float
|
function missing 1 required positional arguments
|
list¶
List delete with step != 1 not implemented
Sample code:
l = [1, 2, 3, 4]
del l[0:4:2]
print(l)
CPy output: | uPy output: |
[2, 4]
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError:
|
List slice-store with non-iterable on RHS is not implemented
Cause: RHS is restricted to be a tuple or list
Workaround: Use list(<iter>)
on RHS to convert the iterable to a list
Sample code:
l = [10, 20]
l[0:1] = range(4)
print(l)
CPy output: | uPy output: |
[0, 1, 2, 3, 20]
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
TypeError: object 'range' is not a tuple or list
|
List store with step != 1 not implemented
Sample code:
l = [1, 2, 3, 4]
l[0:4:2] = [5, 6]
print(l)
CPy output: | uPy output: |
[5, 2, 6, 4]
|
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NotImplementedError:
|
str¶
UnicodeDecodeError not raised when expected
Sample code:
try:
print(repr(str(b"\xa1\x80", 'utf8')))
print('Should not get here')
except UnicodeDecodeError:
print('UnicodeDecodeError')
CPy output: | uPy output: |
UnicodeDecodeError
|
'\u0840'
Should not get here
|
Start/end indices such as str.endswith(s, start) not implemented
Sample code:
print('abc'.endswith('c', 1))
CPy output: | uPy output: |
True
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: start/end indices
|
Attributes/subscr not implemented
Sample code:
print('{a[0]}'.format(a=[1, 2]))
CPy output: | uPy output: |
1
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: attributes not supported yet
|
str(...) with keywords not implemented
Workaround: Input the encoding format directly. eg print(bytes('abc', 'utf-8'))
Sample code:
print(str(b'abc', encoding='utf8'))
CPy output: | uPy output: |
abc
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: keyword argument(s) not yet implemented - use normal args instead
|
None as first argument for rsplit such as str.rsplit(None, n) not implemented
Sample code:
print('a a a'.rsplit(None, 1))
CPy output: | uPy output: |
['a a', 'a']
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: rsplit(None,n)
|
Instance of a subclass of str cannot be compared for equality with an instance of a str
Sample code:
class S(str):
pass
s = S('hello')
print(s == 'hello')
CPy output: | uPy output: |
True
|
False
|
Subscript with step != 1 is not yet implemented
Sample code:
print('abcdefghi'[0:9:2])
CPy output: | uPy output: |
acegi
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
|
tuple¶
Tuple load with step != 1 not implemented
Sample code:
print((1, 2, 3, 4)[0:4:2])
CPy output: | uPy output: |
(1, 3)
|
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported
|