相关疑难解决方法(0)

从ArgumentParser获取允许参数的正确方法

问题:从现有argparse.ArgumentParser对象访问可能的参数的预期/官方方式是什么?

示例:我们假设以下上下文:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', '-f', type=str)
Run Code Online (Sandbox Code Playgroud)

在这里,我想获得以下允许参数列表:

['-h', '--foo', '--help', '-f']
Run Code Online (Sandbox Code Playgroud)

我找到了以下解决方法,它为我提供了诀窍

parser._option_string_actions.keys()
Run Code Online (Sandbox Code Playgroud)

但我对此并不满意,因为它涉及访问_未正式记录的成员.什么是这项任务的正确选择?

python argparse

7
推荐指数
1
解决办法
339
查看次数

为 argparse 参数提供类型提示的更好选择,而不是自定义命名空间

我正在尝试使用 mypy 来检查我的程序。该程序使用 argparse 来解析命令行参数。我想为命令行参数添加类型提示。

import argparse
import typing


# define example types and a function that uses them
Seconds = typing.NewType("Seconds", float)
Minutes = typing.NewType("Minutes", float)

def sec_to_min(s: Seconds) -> Minutes:
    return Minutes(s / 60)

# specify arguments and parse them
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--time", default=1., type=float,
                    help="time in seconds")
args = parser.parse_args()

try:
    # mypy reveals type Any
    reveal_type(args.time)
except NameError:
    pass


# (1) passes type check
seconds: Seconds = args.time
# (2) passes type check
sec_to_min(args.time) …
Run Code Online (Sandbox Code Playgroud)

python type-hinting argparse mypy

5
推荐指数
1
解决办法
1594
查看次数

什么是Python等效于C++命名空间?

在C++中我会写:

namespace LowerLevel{
int DoStuff() {}; //
}
Run Code Online (Sandbox Code Playgroud)

并通过以下方式访问:

LowerLevel::DoStuff()
Run Code Online (Sandbox Code Playgroud)

我如何在Python中执行这两项操作?

python python-3.x

2
推荐指数
1
解决办法
1090
查看次数

标签 统计

python ×3

argparse ×2

mypy ×1

python-3.x ×1

type-hinting ×1