假设我有一个字符串
string = '1234567890'
我想要由另一个字符串定义的那个字符串的一部分
slice = '5:8'
这很容易做到
>>>string[5:8]
'678'
然而,切片是通过文件传入的,并根据用户输入进行更改。他们是做某事的一种方式吗?
>>>string[eval(slice)]
'678'
当我这样做时,我得到了
5:8
^
SyntaxError: invalid syntax
我有一个函数可以解释所有四种情况,我只是想知道它们是否是一种更优雅的方法。
感谢您的回答。
最佳答案
您收到语法错误,因为 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 函数,因此将它用作变量名并不是一个好的做法。
关于python eval和字符串索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5359288/