Есть две вещи, о которых вы не спрашивали, но могли всплыть позже:
, если len(d) == 3
, тогда d[3]
попытается получить доступ к элементу вне d
, а именно его 4-й элемент и IndexError
будут выброшены. Если вы хотите получить доступ к последнему элементу, то d[-1]
- это то, что вы ищете. В противном случае просто измените условие на if len(d) > 3
.
','[0:]
в age.split(','[0:])
является избыточным, поскольку ','[0:] == ','
.
Чтобы понять, почему вы получаете сообщение об ошибке при использовании split_age[1]
, рассмотрим, что происходит, когда в age
нет ','
. Например, скажем age == "12.12"
, тогда age.split(',')
вернет ["12.12"] - массив только с одним элементом. Таким образом, попытка получить доступ к элементу 2nd с индексом 1 выдает IndexError
. Наконец, если age
- пустая строка, то же самое произойдет, age.split(',')
вернет массив с одним элементом ['']
, и попытка доступа к его второму элементу не удастся. Таким образом, вы можете быть уверены, что, пока age
является строкой, split(',')
будет возвращать массив хотя бы с одним элементом (в противном случае он, скорее всего, все равно выдаст ошибку).
Решением для этого является либо явная проверка длины split_age
, либо наличие разделителя, используемого в split
(в вашем случае ",") в age
. Также обратите внимание, что второй будет работать, даже если age == ','
, как в этом случае age.split(',')
, вернет массив с двумя элементами (а именно, две пустые строки). Учитывая все это, ваш улучшенный код может выглядеть примерно так:
ages = []
for d in open_files:
if len(d) > 3:
age = d[3]
if ',' in age:
split_age = age.split(',')
ages.append(split_age[1])
print(ages)