我有一个返回元组或None的函数。调用者应该如何处理这种情况?
def nontest():
return None
x,y = nontest()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable
答案 0 :(得分:11)
EAFP:
try:
x,y = nontest()
except TypeError:
# do the None-thing here or pass
或没有try-except:
res = nontest()
if res is None:
....
else:
x, y = res
答案 1 :(得分:7)
怎么样:
x,y = nontest() or (None,None)
如果nontest返回一个像它应该的两项元组,那么x和y将分配给元组中的项目。否则,x和y都分配给none。如果非测试结果为空,则无法运行特殊代码(如果这是您的目标,上述答案可以帮助您)。好处是它干净,易于阅读/维护。
答案 2 :(得分:5)
如果您可以更改函数本身,最好让它引发相关异常,而不是返回None
来表示错误情况。然后,来电者应该只有try
/ except
。
如果None
不是发出错误信号,那么您需要完全重新考虑您的语义。