Все оказалось намного проще. чем я думал.
Я использовал второй вариант с условием, и дописал в части else:
for index, letter in enumerate(letters.upper()):
for number in range(2, len(names) + 2):
splited_name = names[number - 2].split()
if index == 7:
if int(splited_name[index - 1]) > 150:
ws[f"{letter}{number}"] = "Призер"
else:
ws[f"{letter}{number}"] = "Участник"
else:
if index >= 4 or index == 6:
ws[f"{letter}{number}"] = int(splited_name[index])
По факту, у меня было определенное количество данных, и эти данные по своим позициям были фиксированными, то есть, например первый кусок был точно строкой, а с 4 по 6 были числами, так что мне нужно было выловить их в цикле и просто добавить их в таблицу, и не махиначить с исключениями.