首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python shlex无右引号错误-如何处理?

Python shlex无右引号错误-如何处理?
EN

Stack Overflow用户
提问于 2019-08-14 02:53:18
回答 2查看 2.8K关注 0票数 4

这段简单的代码如下:

代码语言:javascript
运行
复制
s = "it's a nice day..."
s = shlex.split(s)

将导致ValueError: No closing quotation错误:

代码语言:javascript
运行
复制
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

我认为是'出了问题。我该怎么处理呢?我是从文件中读取这一行的,所以我不能在每个引号或其他东西之前输入\

EN

回答 2

Stack Overflow用户

发布于 2019-08-14 03:13:44

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

代码语言:javascript
运行
复制
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函数还可以防止“注入攻击”,如果您要接受不可信(而不是您自己的)输入,则应注意这一点。有关rm -rf ~炸弹的示例,请参阅文档!

票数 5
EN

Stack Overflow用户

发布于 2019-08-14 03:12:44

应该被解析为外壳输入的字符串( shlex就是这样)不能有未转义的'字符。您需要在输入中添加转义字符

代码语言:javascript
运行
复制
x = shlex.split("it\\'s a nice day...")
print(x)

提供:

代码语言:javascript
运行
复制
["it's", 'a', 'nice', 'day...']

您可以通过在输入中执行replace来添加额外的\\

代码语言:javascript
运行
复制
s = s.replace("'", "\\'")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57483794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档