Вы получаете синтаксическую ошибку, поскольку 5:8
сам по себе не является допустимым оператором Python; eval
ожидает нормальный код Python, а не только фрагменты.
Если вы действительно хотите использовать eval
, вы можете сказать:
string = '1234567890'
sliceInput = '5:8'
result = eval('string[' + sliceInput + ']')
Однако это совсем не безопасно, если вы разрешаете ввод данных пользователем. Более безопасный способ был бы:
string = '1234567890'
sliceInput = '5:8'
sliceParts = sliceInput.split(':')
if len(sliceParts) != 2:
# Invalid input -- either no ':' or too many
else:
try:
start, end = [ int(x) for x in sliceParts ]
except ValueError:
# Invalid input, not a number
else:
result = string[start : end]
Обратите внимание, что slice()
- встроенная функция Python, поэтому не рекомендуется использовать ее в качестве имени переменной.