.. This document was generated by tools/gen-cpydiff.py Builtin Types ============= Generated Tue 13 Jun 2017 17:30:45 UTC Exception --------- **Exception chaining not implemented** Sample code:: try: raise TypeError except TypeError: raise ValueError +-------------------------------------------------------------------------+--------------------------------------------+ | CPy output: | uPy output: | +-------------------------------------------------------------------------+--------------------------------------------+ | :: | :: | | | | | Traceback (most recent call last): | Traceback (most recent call last): | | File "", line 8, in | File "", line 10, in | | TypeError | ValueError: | | | | | During handling of the above exception, another exception occurred: | | | | | | Traceback (most recent call last): | | | File "", line 10, in | | | 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 "", line 8, in | | | 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 | | iter | iter | | Traceback (most recent call last): | Traceback (most recent call last): | | File "", line 10, in | File "", line 12, in | | IndexError: list index out of range | 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 "", line 11, in | | | File "", 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 "", line 8, in | | | 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 "", line 7, in | | | 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 "", line 7, in | | | 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 | -10 | | 1.0e+01 | 1.00e+01 | | 1.0e+00 | 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 "", line 11, in | | | File "", line 8, in | | | 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 "", line 8, in | | | 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()`` 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 "", line 8, in | | | 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 "", line 8, in | | | 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 "", line 7, in | | | 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 "", line 7, in | | | 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 "", line 7, in | | | 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 "", line 7, in | | | 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 "", line 7, in | | | 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 "", line 7, in | | | NotImplementedError: only slices with step=1 (aka None) are supported | +-------------+---------------------------------------------------------------------------+