我有这样的功能:
def test():
x = "3" # In actual code, this is computed
if x is None:
return None
y = "3"
if y is None:
return None
z = "hello"
if z is None:
return None
是否有办法让if
语句消失并用一些函数对其进行抽象。我期待这样的事情:
def test():
x = "3"
check_None(x)
y = "3"
check_None(y)
z = "hello"
check_None(z)
理想情况下,如果传递给它的参数为None,check_None
应该改变控制流。这可能吗?
注意:使用Python 2.7。
答案 0 :(得分:2)
你可以在这样的事情上轻松编写代码。
def test():
#compute x, y, z
if None in [x, y, z]:
return None
# proceed with rest of code
更好的方法是使用生成器生成值x,y,z,这样您一次只能计算一个值。
def compute_values():
yield compute_x()
yield compute_y()
yield compute_z()
def test():
for value in compute_values():
if value is None:
return None
答案 1 :(得分:0)
我不确定我们是否应该像这样做,但其中一个黑客可能是这样的,同时创建自己的异常类并且只捕获该特定异常,以便除了和之外没有其他异常被意外捕获返回无。
class MyException(Exception):
pass
def check_none(x):
if x is None:
raise MyException
def test():
try:
z=None
check_none(z)
except MyException, e:
return None
return_value = test()