Python 用Gooey解析列表
我有以下代码Python 用Gooey解析列表,python,python-2.7,Python,Python 2.7,我有以下代码 import argparse from gooey import Gooey, GooeyParser def get_args(): """Get CLI arguments and options""" parser = GooeyParser(description='error test' , formatter_class=argparse.ArgumentDefaultsHelpFormatter)
import argparse
from gooey import Gooey, GooeyParser
def get_args():
"""Get CLI arguments and options"""
parser = GooeyParser(description='error test' ,
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--input', help='List of values',
default=['a', 'b', 'c'])
args = parser.parse_args()
return args
@Gooey()
def main():
args = get_args()
l = args.input
for count, each in enumerate(l):
print each
if __name__ == "__main__":
main()
不幸的是,它返回:
[
'
a
'
,
'
b
'
,
'
c
'
]
a
b
c
如果我使用相同的代码,但注释掉@goey
装饰符,我会得到:
a
b
c
如果我这样做:
import argparse
import ast
from gooey import Gooey, GooeyParser
def get_args():
"""Get CLI arguments and options"""
parser = GooeyParser(description='error test' ,
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--input', help='List of values',
default=['a', 'b', 'c'])
args = parser.parse_args()
return args
@Gooey()
def main():
args = get_args()
l = ast.literal_eval(args.input)
for count, each in enumerate(l):
print each
if __name__ == "__main__":
main()
它返回:
[
'
a
'
,
'
b
'
,
'
c
'
]
a
b
c
但是使用相同的代码并注释掉@goey
装饰器会产生:
Traceback (most recent call last):
File "/Users/alex/Source/AT_analyzer/test.py", line 30, in <module>
main()
File "/Users/alex/Source/AT_analyzer/test.py", line 24, in main
l = ast.literal_eval(args.input)
File "/Users/alex/anaconda3/envs/at_analyzer_env/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/Users/alex/anaconda3/envs/at_analyzer_env/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
回溯(最近一次呼叫最后一次):
文件“/Users/alex/Source/AT_analyzer/test.py”,第30行,在
main()
文件“/Users/alex/Source/AT_analyzer/test.py”,第24行,在main中
l=ast.literal\u eval(args.input)
文件“/Users/alex/anaconda3/envs/at_analyzer_env/lib/python2.7/ast.py”,第80行,文本形式
返回\u转换(节点\u或字符串)
文件“/Users/alex/anaconda3/envs/at_analyzer_env/lib/python2.7/ast.py”,第79行,在
raise VALUERROR('格式错误的字符串')
ValueError:格式不正确的字符串
我希望能够使用相同的代码,使用和不使用
goey
。任何帮助都将不胜感激。该问题与结果中返回的数据类型有关。输入
下面的代码使用粘性,结果是
简单地注释@goey
装饰器会导致results.input的数据类型更改为
下面是使用@goey
装饰器以及注释掉它时的操作
import argparse
import ast
from gooey import Gooey, GooeyParser
def get_args():
"""Get CLI arguments and options"""
parser = GooeyParser(description='error test',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--input', help='List of values',
default=['a', 'b', 'c'])
results = parser.parse_args()
return results
@Gooey()
def main():
results = get_args()
l = ast.literal_eval(str(results.input))
for count, each in enumerate(l):
print each
if __name__ == "__main__":
main()
这是因为无论results.input是作为列表还是字符串返回,它都会显式转换为字符串,然后使用ast.literal\u eval