Du hast Recht! 'example'[3:4]
und 'example'[3]
sind grundlegend anders, und das Schneiden außerhalb der Grenzen einer Sequenz (zumindest für integrierte Funktionen) verursacht keinen Fehler.
Es mag zunächst überraschend sein, aber es macht Sinn, wenn Sie darüber nachdenken. Durch die Indizierung wird ein einzelnes Element zurückgegeben, durch das Schneiden wird jedoch eine Teilsequenz von Elementen zurückgegeben. Wenn Sie also versuchen, einen nicht vorhandenen Wert zu indizieren, gibt es nichts zurückzugeben. Wenn Sie jedoch eine Sequenz außerhalb der Grenzen schneiden, können Sie dennoch eine leere Sequenz zurückgeben.
Was hier verwirrend ist, ist, dass sich Zeichenfolgen etwas anders verhalten als Listen. Schauen Sie, was passiert, wenn Sie dasselbe mit einer Liste machen:
>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]
Hier ist der Unterschied offensichtlich. Bei Zeichenfolgen scheinen die Ergebnisse identisch zu sein, da es in Python kein einzelnes Zeichen außerhalb einer Zeichenfolge gibt. Ein einzelnes Zeichen ist nur eine Zeichenfolge mit 1 Zeichen.
(Die genaue Semantik des Schneidens außerhalb des Bereichs einer Sequenz finden Sie in der Antwort von mgilson .)
[999:9999]
ist kein Index, es ist ein Slice und hat eine andere Semantik. Aus dem Python-Intro: "Entartete Slice-Indizes werden ordnungsgemäß behandelt: Ein zu großer Index wird durch die Zeichenfolgengröße ersetzt. Eine Obergrenze, die kleiner als die Untergrenze ist, gibt eine leere Zeichenfolge zurück."