python eval和字符串索引

标签 python string

假设我有一个字符串

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/

相关文章:

python - 为什么在 Python 目录中创建 postscript 文件?

python - 更改绘图上的轴值

c - 无法将字符串保存到指向数组的指针中

C 字符串到字节或二进制(8 位)

php - PHP减去字符串的第一个字符

python - 如何将 Matplotlib 图转换为 PIL 图像对象(不保存图像)

python - 如何在Python中获取序列中非共享插入和间隙的数量?

python - 如何对 Python 包进行 Debian 打包?

string - lua中查找字符串中的数字

ios - 正则表达式不再工作(Swift 1.2)