Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理python函数返回的空(无)元组_Python - Fatal编程技术网

如何处理python函数返回的空(无)元组

如何处理python函数返回的空(无)元组,python,Python,我有一个函数,要么返回元组,要么不返回。打电话的人应该如何处理这种情况 def nontest(): return None x,y = nontest() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not iterable def nontest(): 一无所获 x、 y=非测试() 回溯(最近一

我有一个函数,要么返回元组,要么不返回。打电话的人应该如何处理这种情况

def nontest():
  return None

x,y = nontest()

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable
def nontest():
一无所获
x、 y=非测试()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“非类型”对象不可编辑

或不尝试,除非:

res = nontest()

if res is None:
    ....
else:
    x, y = res

如果您可以更改函数本身,那么最好让它引发相关异常,而不是返回
None
来表示错误条件。然后,调用方只需尝试/
,除了
之外

如果
None
没有发出错误条件的信号,您需要重新考虑您的语义。

如何:

x,y = nontest() or (None,None)

如果nontest返回一个两项元组,那么x和y被分配给元组中的项。否则,x和y将分别指定为“无”。这样做的缺点是,如果nontest返回为空,您就不能运行特殊代码(如果这是您的目标,上面的答案可以帮助您)。优点是它干净且易于阅读/维护。

如果可能,最好的选择是更改被调用的函数,使其始终返回元组,可能是
(无,无)
如果函数返回
,您想做什么?在这种情况下,
x
应该是什么?在这种情况下,
y
应该是什么?您是否真的想继续当前使用
x
y
的计算?或者,如果完全适合不返回任何内容,您可能应该返回
(无,无)
或其他2元组的值,而不是
。此外,它是
尝试
/
除了
,不
试试
/
抓住
@abarnert:当然,你是对的。我在半个世纪里还没有接触过java,但它仍然困扰着我。对我来说,C++是java,而不是Java……我认为问题的一部分是除了<代码>之外,没有什么好的动词用于<代码>。因此,当Java/C++用户说“尝试它,并捕获错误”时,Python用户必须说“尝试它,并用except处理错误”。由于这很笨拙,我们一直使用“catch”作为动词,这意味着在非代码上下文中,很容易意外地编写
try
/
catch
。那么呢?不知何故,它是否相关?我不确定你是否可以假设(现在)如果标记了Python,OP意味着Python3.x。即使对于3.x,我也不认为它在这里相关。首先,您必须编写
x,*y=nontest()
,然后如果
y
为空,则执行
None
-操作,否则执行
y=y[0]
,我认为这两个选项都不干净。但是,更重要的是,
x,*y=nontest()
仍然会在
None
上失败;您必须将
nontest
改为
return
None,)`。在这一点上,您最好只
返回None,None
,然后就不需要扩展解包了。
x,y = nontest() or (None,None)