Kamu benar! 'example'[3:4]
dan'example'[3]
pada dasarnya berbeda, dan memotong di luar batas suatu urutan (setidaknya untuk bawaan) tidak menyebabkan kesalahan.
Ini mungkin mengejutkan pada awalnya, tetapi masuk akal jika Anda memikirkannya. Pengindeksan mengembalikan satu item, tetapi mengiris mengembalikan item berikutnya. Jadi, saat Anda mencoba mengindeks nilai yang tidak ada, tidak ada yang dikembalikan. Namun saat Anda mengiris urutan di luar batas, Anda masih dapat mengembalikan urutan kosong.
Bagian yang membingungkan di sini adalah string berperilaku sedikit berbeda dari daftar. Lihat apa yang terjadi jika Anda melakukan hal yang sama pada daftar:
>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]
Di sini perbedaannya terlihat jelas. Dalam kasus string, hasilnya tampak identik karena dalam Python, tidak ada karakter individu di luar string. Satu karakter hanyalah string 1 karakter.
(Untuk semantik yang tepat dari mengiris di luar rentang urutan, lihat jawaban mgilson .)
[999:9999]
bukanlah indeks, itu sepotong, dan memiliki semantik yang berbeda. Dari intro python: "Indeks irisan yang menurun ditangani dengan baik: indeks yang terlalu besar diganti dengan ukuran string, batas atas yang lebih kecil dari batas bawah mengembalikan string kosong."