- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从 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/
我是一名优秀的程序员,十分优秀!