python求值和字符串索引

2024-04-19 21:58:19 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一根绳子

string = '1234567890'

我想要一个由另一个字符串定义的字符串片段

^{pr2}$

这很容易做到

>>>string[5:8]
'678'

不过,切片是通过文件传入的,并根据用户输入进行更改。他们的一种方式

>>>string[eval(slice)]
'678'

当我这么做的时候

    5:8
     ^
SyntaxError: invalid syntax

我有一个函数可以解释所有四种情况,我只是想知道它们是否是一种更优雅的方法。在

谢谢你的回答。在


Tags: 文件函数字符串用户string定义eval方式
3条回答

slice语法不允许在方括号之外,因此如果您试图单独计算它,它将中断。如果确实要计算文件中的输入,可以将完整调用构造为字符串,然后对其进行求值:

eval("string[" + slice + "]")

关于eval的常见警告是:恶意用户可以让您的程序以这种方式执行任意代码,因此您最好尝试解析出边界,而不是eval它们。在

由于5:8本身不是有效的Python语句,eval需要正常的Python代码,而不仅仅是片段。在

如果您真的想使用eval,可以说:

string = '1234567890'
sliceInput = '5:8'
result = eval('string[' + sliceInput + ']')

但是,如果允许用户输入,这一点也不安全。更安全的方法是:

^{pr2}$

注意,^{}是一个内置的Python函数,因此将其用作变量名不是一个好的实践。在

怎么样:

string = '1234567890'
slice = '5:8'
sliceP = slice.split(':')
string[int(sliceP[0]):int(sliceP[1])]

相关问题 更多 >