我写的函数有点像这样:
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解决方案就可以了.