gpt4 book ai didi

python - 用 Gooey 解析列表

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:17 26 4
gpt4 key购买 nike

我有以下代码

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
'
]

如果我使用相同的代码但注释掉 @Gooey 装饰器,我会得到:

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

但是使用相同的代码并注释掉 @Gooey 装饰器会产生:

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

我希望能够在有或没有 Gooey 的情况下使用相同的代码。任何帮助将不胜感激。

最佳答案

该问题与results.input中返回的数据类型有关。 .

以下代码使用 Gooey,结果为 <type 'str'>

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()
print(type(results.input))

if __name__ == "__main__":
main()

简单地评论@Gooey装饰器导致 results.input 的数据类型更改为 <type 'list'>

以下内容适用于使用 @Gooey装饰器以及何时将其注释掉。

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_eval 计算为列表

关于python - 用 Gooey 解析列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41901666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com