Co oznacza błąd „indeks krotki poza zakresem” w Pythonie?


Najlepsza odpowiedź

Dobry wieczór,

Na szczęście niektóre języki implementują bezpieczny obiekt dostęp, chociaż nie wiem zbyt wiele w Pythonie, możemy założyć, że obiekt, do którego uzyskujesz dostęp, ma sprawdzanie zakresu.

To, co możemy zrozumieć z tej bardzo prostej instrukcji, to to, że Python tworzy obiekty na niektórych lub większości podstawowych typy danych i niejawnie wywołuje swoje metody dostępu w razie potrzeby, przekształca i sprawdza zakres, konwersje itd., więc masz tam błąd logiczny, sprawdź, dlaczego uzyskałeś dostęp do krotki spoza jej zakresu, najwyraźniej kod ma błąd w indeksie i / lub rozmiar krotki.

To uwaga, aby wskazać, że inne języki są bardziej tolerancyjne w tym, na co pozwalają, co powoduje tak zwany błąd czasu wykonywania, ponieważ dostęp poza zakresem oznacza czytać niezamierzone dane i może zapisywać również w pamięci innego obiektu, a tym samym uszkodzić dane, w końcu powodując utratę danych lub uruchomienie ti Awaria.

Pozdrawiam

Jean-François

Odpowiedź

W Pythonie lista jest zmienna, więc rozmiar nie jest ustalony.

Ponieważ rozmiar nie jest ustalony

Na podstawie przypisanych przez Ciebie wartości do listy, zarządzanie pamięcią w Pythonie – wewnętrznie tworzy listę (dostępny indeks) we wzorcu wzrostu 0, 4 , 8, 16, 25, 35, 46, 58, 72, 88,… zamiast wielokrotnie wywoływać funkcję realloc ().

Ale przypisane wartości dla listy są mniejsze niż lista ( dostępny indeks).

Zatem w przypadku listy dostępny indeks > przypisany indeks.

Jeśli spróbujesz uzyskać dostęp do pustego lub elementu , wskazując dostępny indeks listy, pojawi się „ Błąd indeksu listy poza zakresem”.

otwórz Pythona i zabrudz sobie ręce z TH jest poniżej kodu, aby lepiej go zrozumieć.

>> x = list (1234)

>> x

[1, 2, 3, 4]

>> length = len (x)

4

>> x [długość ]

Błąd indeksu: indeks listy poza zakresem

UWAGA: Indeks listy zaczyna się od zera (0).

Ale tutaj długość wynosi cztery.

Przypisanie powyższej listy wygląda następująco:

x [0] = 1

x [1] = 2

x [2] = 3

x [3] = 4

x [4] =?

Jeśli spróbujesz uzyskać dostęp do x [4], czyli Nieistniejące , indeks listy znajdzie się poza zakresem.

Aby lepiej zrozumieć, w jaki sposób listy wewnętrznie alokują pamięć, zobacz ten link Lista Pythona implementacja .

Dziękuję !!!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *