Cắt lát được sử dụng để tạo danh sách mới. Nếu các chỉ mục không nằm trong phạm vi số lượng phần tử trong danh sách, chúng tôi có thể trả lại danh sách trống. Vì vậy, chúng tôi không phải ném một lỗi. Tuy nhiên, nếu chúng ta cố gắng truy cập các phần tử trong danh sách lớn hơn số phần tử, chúng ta không thể trả về bất kỳ giá trị mặc định nào (thậm chí không None
vì nó có thể là giá trị hợp lệ trong danh sách). Đó là lý do tại sao
IndexError: list index out of range
được ném.
Trong khi cắt, nếu chỉ số bắt đầu lớn hơn hoặc bằng với chiều dài của chuỗi, chiều dài của chuỗi trở lại được đặt bằng 0, trong này line
defstop = *step < 0 ? -1 : length;
...
if (r->stop == Py_None) {
*stop = defstop;
}
...
if ((*step < 0 && *stop >= *start)
|| (*step > 0 && *start >= *stop)) {
*slicelength = 0;
Đối với Strings, nếu độ dài của chuỗi được trả về sau khi cắt là 0, sau đó nó trả về một chuỗi rỗng, trong this line
if (slicelength <= 0) {
return PyString_FromStringAndSize("", 0);
}
@senderle: cảm ơn con trỏ – tejas