Python3不会检测元组

时间:2017-01-14 22:46:38

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

我有这个输入: 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,而它们应该是元组。输入无法更改!

1 个答案:

答案 0 :(得分:3)

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

Windows shell不会将简单引号视为合法的。它们直接传递给你的python代码。最重要的是,双引号被删除,这使得你的第二个arg '(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问题)