我正在写一个像这样的函数:
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
),但我不知道如何操作。
答案 0 :(得分:1)
如何使用关键字参数,然后您可以检查用户是否完全传递了任何内容:
Differences
缺点是,如果有人拼错Show Diff...
,你将无法捕捉到。
答案 1 :(得分:1)
除非你经常需要忽略ParseError
,否则我会让parse
一直抛出,只在我需要的地方抓住它:
try:
parse(sys.argv[4])
except ParseError:
if not flag.ignore_invalid:
raise
虽然如果您必须有默认值,那么_DEFAULT
解决方案就可以了。