python - 从 optparse 传递可选参数

标签 python python-2.6 optparse optional-arguments

我试图弄清楚如何从 optparse 传递可选参数。我遇到的问题是,如果未指定 optparse 选项,它默认为 None 类型,但如果我将 None 类型传递到函数中,它会对我大喊大叫,而不是使用默认值(这是可以理解且有效的)。

conn = psycopg2.connect(database=options.db, hostname=options.hostname, port=options.port)

问题是,如何使用函数的默认值作为可选参数,但如果有输入而不需要大量 if 语句,仍然传入用户输入。

最佳答案

定义一个函数remove_none_values,用于过滤字典中的无值参数。

def remove_none_values(d):
    return dict((k,v) for (k,v) in d.iteritems() if not v is None)

kwargs = {
  'database': options.db,
  'hostname': options.hostname,
  ...
}
conn = psycopg2.connect(**remove_none_values(kwargs))

或者,定义一个函数包装器,在将数据传递给原始函数之前不删除任何值。

def ignore_none_valued_kwargs(f):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        newkwargs = dict((k,v) for (k,v) in d.iteritems() if not v is None)
        return f(*args, **kwargs)
    return wrapper

my_connect = ignore_none_valued_kwargs(psycopg2)
conn = my_connect(database=options.db, hostname=options.hostname, port=options.port)

关于python - 从 optparse 传递可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11661246/

相关文章:

python - 运行能够与主程序通信但与系统隔离的不受信任的 python 代码

python - 这个没有特色的 Python 异常是什么?

python - 如何在显示文本的同时在 Python 2.6.6 中播放音频?

python - 想要 Python 创建一个 UTF-8 文件,得到了一个 ANSI 文件。为什么?

python - 为什么在创建 OptionGroup 时必须提供解析器两次?

python - optparse - 为什么可以忽略选项的最后一个字符?对于 `--file`,它的行为与 `--fil` 相同

python - 用于匹配导出为任务纸格式的 Omnifocus 项目的正则表达式

python - 如何将变化的变量写入文本文件

python - 在python中向某个字符串添加空格

python - 在 Python 中使用 optparse