在Python中,您可以声明一个不显式返回值的函数。例如,您可以写:
def launch_aborted():
call_KimJongUn()
# oops we forget to return a value
然后在if语句中成功使用它,例如:
if not launch_aborted():
launch_ballistic_missile()
在类似情况下,使用未初始化的变量,Python会识别错误并引发异常。 Python不会将未初始化的变量视为无默认,就像处理函数返回值一样。
# if the variable launch_aborted wasn't assigned yet
# interpreter throws NameError or UnboundLocalError here
if not launch_aborted:
# this code will not be exceuted
launch_ballistic_missile()
此行为会掩盖错误。如果函数在其声明中有错误,如果不是它的所有控制路径都返回一个值,那么很难找到这个错误,因为默认情况下它返回None而None也是布尔表达式和赋值中的有效值。
除了简单的实施之外,我正在寻找这个设计决策的任何理由。我知道它需要在调用者中进行额外检查以跟踪此错误,并且可能会稍微降低性能,但这在这里看起来不是一个合理的参数,对变量状态的类似检查也会引入延迟。 / p>
答案 0 :(得分:0)
如果您对自己解决此问题感兴趣,请查看type annotations。它们允许您明确指定您的函数是否可以返回None,然后键入mypy之类的检查器可以告诉您代码是否可能会中断。