【问题标题】:Python3 doesnt detect tuplePython3 不检测元组
【发布时间】:2017-01-14 22:46:37
【问题描述】:

我有这个输入: python script.py --key '("music","aaa")' --date '("01/01/1990",0,0)'

我愿意:

constrain = literal_eval(sys.argv[2])
print(type(constrain))
print(type(sys.argv[4]))

所有输出都是 str 而它们应该是元组。无法更改输入!

【问题讨论】:

  • 添加print(sys.argv)会得到什么?
  • 你用什么shell来运行命令行?听起来好像你用来调用 Python 的任何东西都不会解析引号,所以 Python 被发送到"'(\"music\",\"aaa\")'"
  • 我只得到 (class,'str')
  • repl.it 什么时候支持命令行参数了?
  • s = '("a","b")': 你已经在 python 解释器中了,所以它可以工作!从我的回答中检查命令行(不要键入它,复制/粘贴它)

标签: python windows python-3.x syntax tuples


【解决方案1】:

你的命令行应该可以在 MSYS 或 Linux 上完美运行,但在这里你是从 windows shell 运行的。

Windows shell 不会将简单引号视为语法。它们按字面意思传递给您的 python 代码。最重要的是,双引号被删除,这使得你的第二个参数 '(music,aaa)' 在传递给 python 时:你不可能literal_eval 那。所以你的输入字符串必须被改变(或者你的操作系统:))

执行此操作以调用您的代码:

python script.py --key "(""music"",""aaa"")" --date "(""01/01/1990"",0,0)"

您必须引用参数并将参数中的引号加倍。并且只使用双引号。

编辑:甚至更好(在 Linux 和 Windows 上都可以使用):在参数中使用简单引号,在外部使用双引号(literal_eval 不是 json:它可以理解简单和双引号!):

python script.py --key "('music','aaa')" --date "('01/01/1990',0,0)"

现在我明白了:

<type 'tuple'>
<type 'str'>

(你得到str,因为第四个参数总是一个字符串,你可能忘了literal_eval它)

print(constrain) 产生:

('music', 'aaa')

(所以这不是 python 问题,而是 CMD 问题)

【讨论】:

  • 在这里完美运行。你能粘贴你的新命令行吗?
  • 已更新照片
  • @Dani 看在上帝的份上,不要张贴您显示器的模糊手机图像。复制您要显示的相关文本,并将其粘贴到您的问题中。图像不可搜索,也无法通过屏幕阅读器为有视力障碍的人解读。请参阅this 了解更多信息。你的照片也绝对没有增加讨论。它表明当在 Python 解释器中分配 inside 时,包含双引号的单引号字符串被正确解释为字符串。
  • @Dani 为什么不能更改输入以匹配此答案中的建议?
  • @Dani:您已经在 python 解释器中:您已将 s 作为带引号的字符串传递。你能指望什么。在s 上使用literal_eval 即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2019-11-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多