¿Por qué la división de la lista de python no produce un índice fuera del error de enlace?

Mientras jugaba con la división de matriz, noté que a[index:] or a[:index] tipo de división de a[index:] or a[:index] no produce un índice de matriz fuera del error de enlace para las cadenas.

 str = "abcde" print str[10:] print str[:10] 

produce salida:

 '' abcde 

¿Alguien puede explicar por qué? ¿No debería producir error de índice de matriz fuera de límites? Python produce este error si bash hacer algo como: print str[10] .

El corte se utiliza para crear una nueva lista . Si los índices no están dentro del rango del número de elementos en la lista, podemos devolver una lista vacía. Por lo tanto, no tenemos que lanzar un error.

Pero, si intentamos acceder a los elementos en la lista que es mayor que el número de elementos, no podemos devolver ningún valor predeterminado (ni siquiera None porque podría ser un valor válido en la lista). Es por eso que

 IndexError: list index out of range 

es aventado.

Mientras se corta, si el índice de inicio es mayor o igual que la longitud de la secuencia, la longitud de la secuencia devuelta se establece en 0, en esta línea

 defstop = *step < 0 ? -1 : length; ... if (r->stop == Py_None) { *stop = defstop; } ... if ((*step < 0 && *stop >= *start) || (*step > 0 && *start >= *stop)) { *slicelength = 0; 

Para las cadenas, si la longitud de la cadena que se devolverá después del corte es 0, entonces devuelve una cadena vacía, en esta línea

 if (slicelength <= 0) { return PyString_FromStringAndSize("", 0); } 

Así es como se implementa el operador de corte en python. Si los índices de la matriz están fuera de los límites, se truncará automáticamente en los lugares correctos.