Python shlex 没有右引号错误——如何处理?

标签 python python-3.x shlex

这个简单的代码:

s = "it's a nice day..."
s = shlex.split(s)

将导致 ValueError: No closing quotation错误:
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    s = shlex.split(s)
  File "C:\Python\Python35-32\lib\shlex.py", line 273, in split
    return list(lex)
  File "C:\Python\Python35-32\lib\shlex.py", line 263, in __next__
    token = self.get_token()
  File "C:\Python\Python35-32\lib\shlex.py", line 90, in get_token
    raw = self.read_token()
  File "C:\Python\Python35-32\lib\shlex.py", line 166, in read_token
    raise ValueError("No closing quotation")
ValueError: No closing quotation

我假设 '有错。我该如何处理?我从文件中读取了这一行,所以我不能只输入 \在每个报价或某事之前。

最佳答案

您应该使用 shlex.quote(s) 在拆分之前安全地转义读取输入。如果您查看链接中的文档,quote与拆分兼容。

import shlex
s = "it's a nice day..."
sq = shlex.quote(s)
print(sq)          #  '\'it\'"\'"\'s a nice day...\''
shlex.split(sq)    # ["it's a nice day..."]
quote的使用如果您要接受不受信任的(不是您自己的)输入,该功能还将保护您免受“注入(inject)攻击”的影响。有关 rm -rf ~ 的示例,请参阅文档。炸弹!

关于Python shlex 没有右引号错误——如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57483794/

相关文章:

python - 如何找到二维数组中每一行的最大值?

python - 通过迭代给定数据返回字典列表

python - 解析此脚本语言的最有效方法

python - Django DRF - 通过权限限制对 ListView 的访问

python-3.x - 在另一列的条件下用 Pandas 替换字符串列以特定子字符串结尾

Python:拆分字符串,尊重并保留引号

Python 按空格拆分字符串,除非在引号中,但保留引号

Python删除相等列表

python - Selenium 无法打开指定的 URL 并显示数据 :,

python - 在Python中使用索引对日期进行分组