gpt4 book ai didi

python - 如何将 optparse() 代码升级为 argparse() 代码

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

我正在尝试从 pythons 现在弃用的 optparse 模块升级到新的 argparse 模块。但是我在升级我的代码时遇到了一些问题。我一直在使用 pythons 文档来做这件事,但我似乎碰壁了。这是使用 optparse 模块的原始代码片段

if __name__ == "__main__":
parser = optparse.OptionParser(usage="%prog [options] hostname")
parser.add_option("-p","--port", dest="port",
help="Port to use for socket connection [default: %default]",
default=33434, metavar="PORT")
parser.add_option("-m", "--max-hops", dest="max_hops",
help="Max hops before giving up [default: %default]",
default=30, metavar="MAXHOPS")
(options, args) = parser.parse_args()
if len(args) != 1:
parser.error('Incorrect number of arguments')
else:
dest_name = args[0]
sys.exit(main(dest_name=dest_name,
port=int(options.port),
max_hops=int(options.max_hops)))

现在这是我能够做的部分升级代码

if __name__ == "__main__":
parser = argparse.ArgumentParser(usage="%(prog)s [options] hostname")
parser.add_argument("-p","--port", dest="port",
help="Port to use for socket connection [default: %(default)s]",
default=33434, metavar="PORT")
parser.add_argument("-m", "--max-hops", dest="max_hops",
help="Max hops before giving up [default: %(default)s]",
default=30, metavar="MAXHOPS")
args = parser.parse_args()
if len(sys.argv) != 1:
parser.error('Incorrect number of arguments')
else:
dest_name = sys.argv
sys.exit(main(dest_name=dest_name,
port=int(options.port),
max_hops=int(options.max_hops)))

当我尝试运行代码时,我不断收到此错误:

*port=int(options.port),
NameError: name 'options' is not defined*

在 optparse() 模块中我在这里定义了它

(options, args) = parser.parse_args()

当我尝试以与 optparse 模块相同的方式定义它时,它给了我另一个错误:

*TypeError: 'Namespace' object is not iterable*

(我知道 (options, args) = parser.parse_args()argparse 模块。我只是在四处寻找解决方案。此时我很绝望)

最后,我尝试将 port=int(options.port) 中的“选项”更改为 port=int(args.port),这给了我更多的错误。在阅读了关于将 optparse 升级到 argparse 的文档后,我想我可能知道我的问题出在哪里了。文档说明

“将选项 args = parser.parse_args() 替换为 args = parser.parse_args() 并为位置参数添加额外的 add_argument() 调用。”

所以我认为我的问题是我没有为位置参数添加额外的 add_argument() 调用。由于我是新手并且仍在尝试学习 pythons 解析模块,所以我不知道如何去完成它。

最佳答案

摆脱这个 optparse 胡说八道:

if len(sys.argv) != 1:
parser.error('Incorrect number of arguments')
else:
dest_name = sys.argv

然后添加一个位置参数

parser.add_argument('hostname')
...
dest_name = args.hostname

关于python - 如何将 optparse() 代码升级为 argparse() 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29336898/

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