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
|