python – None的默认参数替代?

我写的函数有点像这样:

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:
            ...

但这似乎是我在思考它,似乎有一种更简单的方法.

any和all函数都这样做(默认允许None),但我不知道如何.

最佳答案 除非你经常需要忽略ParseError,否则我只是让解析抛出所有的时间,并且只在我需要的地方捕获它:

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

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

点赞