缺省参数替代无?

时间:2015-05-11 18:16:59

标签: python function default-parameters

我正在写一个像这样的函数:

def parse(string, default=None):
    try:
        ...  # Body of function here
    except ParseError:
        if default is not None:
            return default
        raise

但是如果我真的希望函数返回None,那么我会遇到问题。

if len(sys.argv) > 4:
    if flag.ignore_invalid:
        result = parse(sys.argv[4], None)  # Still raises error
    else:
        result = parse(sys.argv[4])

我试图解决的问题是:

_DEFAULT = object()

def parse(string, default=_DEFAULT):
    ...
        if default is not _DEFAULT:
            ...

但这似乎是我过度思考它,似乎有一种更简单的方法。

anyall功能执行此操作(默认情况下允许None),但我不知道如何操作。

2 个答案:

答案 0 :(得分:1)

如何使用关键字参数,然后您可以检查用户是否完全传递了任何内容:

Differences

缺点是,如果有人拼错Show Diff...,你将无法捕捉到。

答案 1 :(得分:1)

除非你经常需要忽略ParseError,否则我会让parse一直抛出,只在我需要的地方抓住它:

try:
    parse(sys.argv[4])
except ParseError:
    if not flag.ignore_invalid:
        raise

虽然如果您必须有默认值,那么_DEFAULT解决方案就可以了。