Yerleşik türler

Generated Fri 19 Jun 2026 22:08:45 UTC

İstisna

Yalnızca StopIteration ve OSError değil, tüm istisnalar okunabilir value ve errno özelliklerine sahiptir.

Neden: MicroPython, kod boyutunu küçültmek için optimize edilmiştir.

Geçici çözüm: value özelliğini yalnızca StopIteration istisnalarında, errno özelliğini yalnızca OSError istisnalarında kullanın. Diğer istisnalarda bu özelliklere güvenmeyin.

Örnek kod:

e = Exception(1)
print(e.value)
print(e.errno)

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
AttributeError: 'Exception' object has no attribute 'value'
1
1

İstisna zinciri uygulanmamıştır

Örnek kod:

try:
    raise TypeError
except TypeError:
    raise ValueError

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
TypeError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
ValueError
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
ValueError:

Yerleşik istisnalar için kullanıcı tanımlı özellikler desteklenmemektedir

Neden: MicroPython, bellek kullanımı için yüksek düzeyde optimize edilmiştir.

Geçici çözüm: Kullanıcı tanımlı istisna alt sınıflarını kullanın.

Örnek kod:

e = Exception()
e.x = 0
print(e.x)

CPython output:

MicroPython output:

0
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
AttributeError: 'Exception' object has no attribute 'x'

while döngüsü koşulundaki istisna beklenmedik satır numarası gösterebilir

Neden: Koşul denetimleri döngü gövdesinin sonunda gerçekleşecek şekilde optimize edilmiştir ve raporlanan satır numarası bu konuma aittir.

Örnek kod:

l = ["-foo", "-bar"]

i = 0
while l[i][0] == "-":
    print("iter")
    i += 1

CPython output:

MicroPython output:

iter
iter
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
IndexError: list index out of range
iter
iter
Traceback (most recent call last):
  File "<stdin>", line 13, in <module>
IndexError: list index out of range

Exception.__init__ metodu mevcut değildir.

Neden: Yerel sınıfların alt sınıflarının oluşturulması MicroPython’da tam olarak desteklenmemektedir.

Geçici çözüm: Bunun yerine super() kullanarak çağırın:

class A(Exception):
    def __init__(self):
        super().__init__()

Örnek kod:

class A(Exception):
    def __init__(self):
        Exception.__init__(self)


a = A()

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 18, in <module>
  File "<stdin>", line 15, in __init__
AttributeError: type object 'Exception' has no attribute '__init__'

OSError

OSError constructor returns a plain OSError for all errno values, rather than a relevant subtype.

Cause: MicroPython does not include the CPython-standard OSError subclasses.

Workaround: Catch OSError and use its errno attribute to discriminate the cause.

Örnek kod:

import errno

errno_list = [  # i.e. the set implemented by micropython
    errno.EPERM,
    errno.ENOENT,
    errno.EIO,
    errno.EBADF,
    errno.EAGAIN,
    errno.ENOMEM,
    errno.EACCES,
    errno.EEXIST,
    errno.ENODEV,
    errno.EISDIR,
    errno.EINVAL,
    errno.EOPNOTSUPP,
    errno.EADDRINUSE,
    errno.ECONNABORTED,
    errno.ECONNRESET,
    errno.ENOBUFS,
    errno.ENOTCONN,
    errno.ETIMEDOUT,
    errno.ECONNREFUSED,
    errno.EHOSTUNREACH,
    errno.EALREADY,
    errno.EINPROGRESS,
]


def errno_output_type(n):
    try:
        raise OSError(n, "")
    except OSError as e:
        return f"{type(e).__name__}"
    except Exception as e:
        return f"non-OSError {type(e).__name__}"
    else:
        return "no error"


for n in errno_list:
    print(errno.errorcode[n], "=", errno_output_type(n))

CPython output:

MicroPython output:

EPERM = PermissionError
ENOENT = FileNotFoundError
EIO = OSError
EBADF = OSError
EAGAIN = BlockingIOError
ENOMEM = OSError
EACCES = PermissionError
EEXIST = FileExistsError
ENODEV = OSError
EISDIR = IsADirectoryError
EINVAL = OSError
ENOTSUP = OSError
EADDRINUSE = OSError
ECONNABORTED = ConnectionAbortedError
ECONNRESET = ConnectionResetError
ENOBUFS = OSError
ENOTCONN = OSError
ETIMEDOUT = TimeoutError
ECONNREFUSED = ConnectionRefusedError
EHOSTUNREACH = OSError
EALREADY = BlockingIOError
EINPROGRESS = BlockingIOError
EPERM = OSError
ENOENT = OSError
EIO = OSError
EBADF = OSError
EAGAIN = OSError
ENOMEM = OSError
EACCES = OSError
EEXIST = OSError
ENODEV = OSError
EISDIR = OSError
EINVAL = OSError
EOPNOTSUPP = OSError
EADDRINUSE = OSError
ECONNABORTED = OSError
ECONNRESET = OSError
ENOBUFS = OSError
ENOTCONN = OSError
ETIMEDOUT = OSError
ECONNREFUSED = OSError
EHOSTUNREACH = OSError
EALREADY = OSError
EINPROGRESS = OSError

bytearray

Desteklenmeyen sağ taraf (RHS) ile dizi dilimi ataması

Örnek kod:

b = bytearray(4)
b[0:1] = [1, 2]
print(b)

CPython output:

MicroPython output:

bytearray(b'\x01\x02\x00\x00\x00')
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
NotImplementedError: array/bytes required on right side

bytes

bytes nesneleri .format() metodunu destekler

Neden: MicroPython daha tutarlı bir uygulama olmayı hedefler; bu nedenle hem str hem de bytes __mod__() (% operatörü) destekliyorsa, her ikisi için de format() desteklenmesi mantıklıdır. __mod__ desteği derleme sırasında devre dışı bırakılabilir; bu durumda bytes biçimlendirmesi için yalnızca format() kalır.

Geçici çözüm: CPython uyumluluğu önemliyse bytes nesneleri üzerinde .format() kullanmayın.

Örnek kod:

print(b"{}".format(1))

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
AttributeError: 'bytes' object has no attribute 'format'
b'1'

bytes() için anahtar sözcük bağımsız değişkenleri uygulanmamıştır

Geçici çözüm: Kodlamayı konumsal parametre olarak geçirin, örn. print(bytes('abc', 'utf-8'))

Örnek kod:

print(bytes("abc", encoding="utf8"))

CPython output:

MicroPython output:

b'abc'
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NotImplementedError: keyword argument(s) not implemented - use normal args instead

Adım != 1 olan bytes indislemesi uygulanmamıştır

Neden: MicroPython, bellek kullanımı için yüksek düzeyde optimize edilmiştir.

Geçici çözüm: Bu çok nadir işlem için açık bir döngü kullanın.

Örnek kod:

print(b"123"[0:3:2])

CPython output:

MicroPython output:

b'13'
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported

complex

MicroPython’s complex() accepts certain incorrect values that CPython rejects

Neden: MicroPython, bellek kullanımı için yüksek düzeyde optimize edilmiştir.

Workaround: Do not use non-standard complex literals as argument to complex()

MicroPython’s complex() function accepts literals that contain a space and no sign between the real and imaginary parts, and interprets it as a plus.

Örnek kod:

try:
    print(complex("1 1j"))
except ValueError:
    print("ValueError")

CPython output:

MicroPython output:

ValueError
(1+1j)

dict

Sözlük anahtar görünümü küme gibi davranmaz.

Neden: Uygulanmamıştır.

Geçici çözüm: Küme işlemlerini kullanmadan önce anahtarları açıkça bir kümeye dönüştürün.

Örnek kod:

print({1: 2, 3: 4}.keys() & {1})

CPython output:

MicroPython output:

{1}
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
TypeError: unsupported types for __and__: 'dict_view', 'set'

float

MicroPython allows implicit conversion of objects in maths operations while CPython does not.

Geçici çözüm: CPython uyumluluğu için nesneler float(obj) ile sarılmalıdır.

Örnek kod:

class Test:
    def __float__(self):
        return 0.5


print(2.0 * Test())

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 14, in <module>
TypeError: unsupported operand type(s) for *: 'float' and 'Test'
1.0

int

bit_length metodu mevcut değildir.

Neden: bit_length metodu uygulanmamıştır.

Geçici çözüm: MicroPython’da bu metodun kullanımından kaçının.

Örnek kod:

x = 255
print("{} is {} bits long.".format(x, x.bit_length()))

CPython output:

MicroPython output:

255 is 8 bits long.
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
AttributeError: 'int' object has no attribute 'bit_length'

int türetilmiş türler için int dönüşümü mevcut değil

Geçici çözüm: Gerçekten gerekli olmadıkça yerleşik türleri alt sınıflandırmaktan kaçının. https://en.wikipedia.org/wiki/Composition_over_inheritance adresindeki yaklaşımı tercih edin.

Örnek kod:

class A(int):
    __add__ = lambda self, other: A(int(self) + other)


a = A(42)
print(a + a)

CPython output:

MicroPython output:

84
Traceback (most recent call last):
  File "<stdin>", line 14, in <module>
  File "<stdin>", line 10, in <lambda>
TypeError: unsupported types for __radd__: 'int', 'int'

to_bytes metodu signed parametresini uygulamaz.

Neden: int.to_bytes() için signed yalnızca-anahtar-sözcük parametresi uygulanmamıştır.

Tamsayı negatif olduğunda MicroPython, CPython’ın int.to_bytes(..., signed=True) davranışıyla aynı şekilde davranır

Tamsayı negatif olmadığında MicroPython, CPython’ın int.to_bytes(..., signed=False) davranışıyla aynı şekilde davranır.

(Fark ince olmakla birlikte, CPython’da signed=True ile dönüştürülen pozitif bir tamsayı, 0 işaret bitini sığdırmak için çıkış uzunluğunda bir bayt daha gerektirebilir.)

Geçici çözüm: Negatif olabilecek bir tamsayı değeri üzerinde to_bytes() çağırırken dikkatli olun.

Örnek kod:

x = -1
print(x.to_bytes(1, "big"))

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 16, in <module>
OverflowError: can't convert negative int to unsigned
b'\xff'

list

Adım != 1 olan liste silme işlemi uygulanmamıştır

Geçici çözüm: Bu nadir işlem için açık bir döngü kullanın.

Örnek kod:

l = [1, 2, 3, 4]
del l[0:4:2]
print(l)

CPython output:

MicroPython output:

[2, 4]
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
NotImplementedError:

Sağ tarafta (RHS) yinelenemeyen değerle liste dilimi-atama işlemi uygulanmamıştır

Neden: Sağ taraf (RHS) yalnızca tuple veya list olabilir

Geçici çözüm: Yinelenebiliri listeye dönüştürmek için sağ tarafta list(<iter>) kullanın

Örnek kod:

l = [10, 20]
l[0:1] = range(4)
print(l)

CPython output:

MicroPython output:

[0, 1, 2, 3, 20]
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
TypeError: object 'range' isn't a tuple or list

Adım != 1 olan liste atama işlemi uygulanmamıştır

Geçici çözüm: Bu nadir işlem için açık bir döngü kullanın.

Örnek kod:

l = [1, 2, 3, 4]
l[0:4:2] = [5, 6]
print(l)

CPython output:

MicroPython output:

[5, 2, 6, 4]
Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
NotImplementedError:

memoryview

Hedef yeniden boyutlandırıldığında memoryview geçersiz hale gelebilir

Neden: CPython, bir memoryview nesnesi tarafından referans alınan bytearray veya io.bytesIO nesnesinin boyut değiştirmesini engeller. MicroPython ise herhangi bir memoryview referans gösterirken nesnenin yeniden boyutlandırılmamasını programcının elle sağlamasını gerektirir.

En kötü senaryoda, bir memoryview’in hedefi olan nesnenin yeniden boyutlandırılması, memoryview’lerin geçersiz serbest bırakılmış belleğe başvurmasına (use-after-free hatası) ve MicroPython çalışma ortamının bozulmasına yol açabilir.

Geçici çözüm: Kendisine memoryview atanmış herhangi bir bytearray veya io.bytesIO nesnesinin boyutunu değiştirmeyin.

Örnek kod:

b = bytearray(b"abcdefg")
m = memoryview(b)
b.extend(b"hijklmnop")
print(b, bytes(m))

CPython output:

MicroPython output:

Traceback (most recent call last):
  File "<stdin>", line 12, in <module>
BufferError: Existing exports of data: object cannot be re-sized
bytearray(b'abcdefghijklmnop') b'abcdefg'

range

Range objects with large start or stop arguments misbehave.

Cause: Intermediate calculations overflow the C mp_int_t type

Workaround: Avoid using such ranges

Örnek kod:

from sys import maxsize

# A range including `maxsize-1` cannot be created
try:
    print(range(-maxsize - 1, 0))
except OverflowError:
    print("OverflowError")

# A range with `stop-start` exceeding sys.maxsize has incorrect len(), while CPython cannot calculate len().
try:
    print(len(range(-maxsize, maxsize)))
except OverflowError:
    print("OverflowError")

# A range with `stop-start` exceeding sys.maxsize has incorrect len()
try:
    print(len(range(-maxsize, maxsize, maxsize)))
except OverflowError:
    print("OverflowError")

CPython output:

MicroPython output:

range(-9223372036854775808, 0)
OverflowError
2
OverflowError
0
0

str

MicroPython accepts the “,” grouping option with any radix, unlike CPython

Cause: To reduce code size, MicroPython does not issue an error for this combination

Workaround: Do not use a format string like {:,b} if CPython compatibility is required.

Örnek kod:

try:
    print("{:,b}".format(99))
except ValueError:
    print("ValueError")
try:
    print("{:,x}".format(99))
except ValueError:
    print("ValueError")
try:
    print("{:,o}".format(99))
except ValueError:
    print("ValueError")

CPython output:

MicroPython output:

ValueError
ValueError
ValueError
110,0011
63
143

MicroPython accepts but does not properly implement the “,” or “_” grouping character for float values

Cause: To reduce code size, MicroPython does not implement this combination. Grouping characters will not appear in the number’s significant digits and will appear at incorrect locations in leading zeros.

Workaround: Do not use a format string like {:,f} if exact CPython compatibility is required.

Örnek kod:

print("{:,f}".format(3141.159))
print("{:_f}".format(3141.159))
print("{:011,.2f}".format(3141.159))
print("{:011_.2f}".format(3141.159))

CPython output:

MicroPython output:

3,141.159000
3_141.159000
0,003,141.16
0_003_141.16
3141.159000
3141.159000
000,3141.16
0_003141.16

Özellikler/indisleme uygulanmamıştır

Örnek kod:

print("{a[0]}".format(a=[1, 2]))

CPython output:

MicroPython output:

1
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NotImplementedError: attributes not supported

str() için anahtar sözcük bağımsız değişkenleri uygulanmamıştır

Geçici çözüm: Kodlama biçimini doğrudan girin. örn. print(bytes('abc', 'utf-8'))

Örnek kod:

print(str(b"abc", encoding="utf8"))

CPython output:

MicroPython output:

abc
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NotImplementedError: keyword argument(s) not implemented - use normal args instead

str.ljust() ve str.rjust() uygulanmamıştır

Neden: MicroPython, bellek kullanımı için yüksek düzeyde optimize edilmiştir. Kolay geçici çözümler mevcuttur.

Geçici çözüm: s.ljust(10) yerine "%-10s" % s, s.rjust(10) yerine "% 10s" % s kullanın. Alternatif olarak "{:<10}".format(s) veya "{:>10}".format(s) de kullanılabilir.

Örnek kod:

print("abc".ljust(10))

CPython output:

MicroPython output:

abc
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
AttributeError: 'str' object has no attribute 'ljust'

str.rsplit(None, n) gibi rsplit için ilk bağımsız değişken olarak None uygulanmamıştır

Örnek kod:

print("a a a".rsplit(None, 1))

CPython output:

MicroPython output:

['a a', 'a']
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NotImplementedError: rsplit(None,n)

Adım != 1 olan indisleme henüz uygulanmamıştır

Örnek kod:

print("abcdefghi"[0:9:2])

CPython output:

MicroPython output:

acegi
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported

tuple

Adım != 1 olan tuple erişimi uygulanmamıştır

Örnek kod:

print((1, 2, 3, 4)[0:4:2])

CPython output:

MicroPython output:

(1, 3)
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
NotImplementedError: only slices with step=1 (aka None) are supported