请考虑以下事项:
def funcA():
some process = dynamicVar
if dynamicVar == 1:
return dynamicVar
else:
print "no dynamicVar"
def main():
outcome = funcA()
如果'some process'部分导致1,则var dynamicVar将作为outcome
传递回主func。如果dynamicVar不是1,则例程失败,因为没有返回参数。
我可以将结果包装成一个列表:
def funcA():
outcomeList = []
some process = dynamicVar
if dynamicVar == 1:
outcomeList.append(dynamicVar)
return outcomeList
else:
print "no dynamicVar"
return outcomeList
def main():
outcome = funcA()
if outcome != []:
do something using dynamicVar
else:
do something else!
或者可能是字典项目。我能想到的两个解决方案中的每一个涉及主/请求函数中的另一组处理。
这是处理这种可能性的“正确”方法吗?或者,还有更好的方法?
处理这个问题的正确方法是什么?我特别考虑尝试捕获try:
/ except:
错误,因此在该示例中,用法是相反的,所以有类似的内容:
def funcA():
some process = dynamicVar
if dynamicVar == 1:
return
else:
outcome = "no dynamicVar"
return outcome
def main():
try:
funcA()
except:
outcome = funcA.dynamicVar
答案 0 :(得分:3)
在Python中,所有不返回值的函数都将隐式返回None
。因此,您只需检查if outcome is not None
中的main()
。
答案 1 :(得分:2)
我相信当你写一个函数时,它的返回值应该是明确的和预期的。你应该回复你说你会回来的东西。话虽如此,您可以使用None
作为有意义的返回值来指示操作失败或没有产生结果:
def doSomething():
"""
doSomething will return a string value
If there is no value available, None will be returned
"""
if check_something():
return "a string"
# this is being explicit. If you did not do this,
# None would still be returned. But it is nice
# to be verbose so it reads properly with intent.
return None
或者您可以确保始终返回相同类型的默认值:
def doSomething():
"""
doSomething will return a string value
If there is no value available, and empty string
will be returned
"""
if check_something():
return "a string"
return ""
这处理了一系列复杂的条件测试,最终只是通过:
def doSomething():
if foo:
if bar:
if biz:
return "value"
return ""