Разбирането на системата от типове на Python е от ключово значение за разрешаването на този труден бъг.
Опитвате се да извлечете данни от обект и вместо това виждате грешка „обектът не може да се записва“? Проблемът е, че индексирате грешен тип данни.
Научете всичко за записващите се типове и как да разрешите тази грешка.
Какво означава „подлежащ на абонамент“ в Python?
Терминът "подлежащ на абонамент" в Python означава тип данни, който съхранява множество стойности, до които имате индивидуален достъп. Можете да осъществите достъп до конкретна стойност от подлежащ на индексиране тип данни чрез неговия индекс, като използвате нотация в квадратни скоби ([]).
Ако се опитате да получите достъп до елементите в тип данни, който не може да се индексира, Python предизвиква изключение „TypeError: object is not subscriptable“.
Следните типове данни могат да се записват в Python: списъци, низове, кортежи и речници.
списък_пример = [1, 3, 5, "Idowu"]
низ_пример = „Идову Омисола“
кортеж_пример = (1, 3, 5, "Idowu")
dict_example = {"име": "Idowu", "Език": "йоруба"}
печат (списък_пример[0]) # 1
печат (низ_пример[3]) # w
print (tuple_example[1]) # 3
печат (dict_example["име"]) # Идову
Въпреки това, набори, цели числа, плаващи числа и булеви стойности са недостъпни чрез индексиране, така че не могат да се записват:
float_example = 12.45
int_example = 12367
bool_example = Вярно
set_example = {1, 3, 5, "Python"}
печат (float_example[1])
печат (bool_example[2])
печат (int_example[2])
печат (set_example[2])
Опитът за изпълнение на всеки от тези изрази извежда изключението „обектът не може да се записва“:
Разрешаване на изключението
Разрешаването на изключението „обектът не може да се записва“ е по-лесно, след като разберете правилата за достъп до всеки тип данни. Така че започнете отстраняването на грешки в Python, като проверите типа данни на обекта, който се опитвате да индексирате.
float_example = 12.45
int_example = 12367
bool_example = Вярно
set_example = {1, 3, 5, "Python"}
печат (тип (float_example)) #
печат (тип (int_example)) #
печат (тип (bool_example)) #
печат (тип (set_example)) #
След като установите, че типът данни не подлежи на индексиране, преобразуването му в индексируем тип решава проблема. Това е удобно, ако данните са от API на трета страна. Преобразуването на типове данни като integer, float и Boolean в низ ги прави подписваеми:
печат (str (float_example)[:2]) # 12
печат (str (int_example)[:2]) # 12
печат (str (bool_example)[:2]) # Tr
Можете дори манипулирайте получените низове на Python както искаш. Ако работите с цяло число и плаващо число, може да искате да запазите оригиналния тип данни в изхода. За да направите това, преобразувайте получената стойност в оригиналния им тип данни, след като ги индексирате като низове:
converted_float = float (str (float_example)[:2])
converted_int = int (str (int_example)[:2])# 12.0 Тип данни:
печат (converted_float, f'Тип данни:{type (converted_float)}')
# 12 Тип данни:
печат (converted_int, f'Тип данни:{type (converted_int)}')
Що се отнася до комплекта, можете да го трансформирате в списък. Въпреки че можете да конвертирате зададен обект в списък, като използвате списък (набор) Едноредов Python, това не запазва позициите на елементите в получения списък. За да сте сигурни, че получавате списък със запазени позиции на елементи, използвайте ламбда функцията на Python така:
set_example = {1, 3, 5, "Python"}
преобразуван = сортиран (set_example, key=ламбда x: (isinstance (x, str), x))
печат (преобразуван [3]) # Python
Овладейте отстраняването на грешки в Python
Python има плавна крива на обучение. Но простите изключения могат да ви отблъснат, ако не знаете как да се справите с тях. Да се научите да отстранявате грешки в кода си и да не бързате с решаването на проблеми, ще допринесе много за коригирането на грешки и изключения в кодирането на Python.