Modules

Generated Wed 11 Nov 2020 02:26:58 UTC

array

Looking for integer not implemented

Sample code:

import array
print(1 in array.array('B', b'12'))

CPy output:

uPy output:

False
/bin/sh: ../ports/unix/micropython: No such file or directory

Array deletion not implemented

Sample code:

import array
a = array.array('b', (1, 2, 3))
del a[1]
print(a)

CPy output:

uPy output:

array('b', [1, 3])
/bin/sh: ../ports/unix/micropython: No such file or directory

Subscript with step != 1 is not yet implemented

Sample code:

import array
a = array.array('b', (1, 2, 3))
print(a[3:2:2])

CPy output:

uPy output:

array('b')
/bin/sh: ../ports/unix/micropython: No such file or directory

builtins

Second argument to next() is not implemented

Cause: MicroPython is optimised for code space.

Workaround: Instead of val = next(it, deflt) use:

try:
    val = next(it)
except StopIteration:
    val = deflt

Sample code:

print(next(iter(range(0)), 42))

CPy output:

uPy output:

42
/bin/sh: ../ports/unix/micropython: No such file or directory

deque

Deque not implemented

Workaround: Use regular lists. micropython-lib has implementation of collections.deque.

Sample code:

import collections
D = collections.deque()
print(D)

CPy output:

uPy output:

deque([])
/bin/sh: ../ports/unix/micropython: No such file or directory

json

JSON module does not throw exception when object is not serialisable

Sample code:

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 output:

uPy output:

TypeError
/bin/sh: ../ports/unix/micropython: No such file or directory

os

environ attribute is not implemented

Workaround: Use getenv, putenv and unsetenv

Sample code:

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 output:

uPy output:

None
VALUE
/bin/sh: ../ports/unix/micropython: No such file or directory

getenv returns actual value instead of cached value

Cause: The environ attribute is not implemented

Sample code:

import os
print(os.getenv('NEW_VARIABLE'))
os.putenv('NEW_VARIABLE', 'VALUE')
print(os.getenv('NEW_VARIABLE'))

CPy output:

uPy output:

None
None
/bin/sh: ../ports/unix/micropython: No such file or directory

getenv only allows one argument

Workaround: Test that the return value is None

Sample code:

import os
try:
    print(os.getenv('NEW_VARIABLE', 'DEFAULT'))
except TypeError:
    print('should not get here')
    # this assumes NEW_VARIABLE is never an empty variable
    print(os.getenv('NEW_VARIABLE') or 'DEFAULT')

CPy output:

uPy output:

DEFAULT
/bin/sh: ../ports/unix/micropython: No such file or directory

struct

Struct pack with too few args, not checked by uPy

Sample code:

import struct
try:
    print(struct.pack('bb', 1))
    print('Should not get here')
except:
    print('struct.error')

CPy output:

uPy output:

struct.error
/bin/sh: ../ports/unix/micropython: No such file or directory

Struct pack with too many args, not checked by uPy

Sample code:

import struct
try:
    print(struct.pack('bb', 1, 2, 3))
    print('Should not get here')
except:
    print('struct.error')

CPy output:

uPy output:

struct.error
/bin/sh: ../ports/unix/micropython: No such file or directory

sys

Overriding sys.stdin, sys.stdout and sys.stderr not possible

Cause: They are stored in read-only memory.

Sample code:

import sys
sys.stdin = None
print(sys.stdin)

CPy output:

uPy output:

None
/bin/sh: ../ports/unix/micropython: No such file or directory