Python名称未定义,但计算结果为true。怎么用?
我有一些类似这样的python代码:Python名称未定义,但计算结果为true。怎么用?,python,Python,我有一些类似这样的python代码: try: bob = bob_module.Bob('alpha') except Exception as e: print 'Alpha mode failed for bob: ' + str(e) + ').' try: if bob: bob.add('Beta') else: bob = bob_module.Bob('Beta') except Exception as e:
try:
bob = bob_module.Bob('alpha')
except Exception as e:
print 'Alpha mode failed for bob: ' + str(e) + ').'
try:
if bob:
bob.add('Beta')
else:
bob = bob_module.Bob('Beta')
except Exception as e:
print 'Beta mode failed for bob: ' + str(e) + ').'
当此代码运行Alpha模式失败时,出于可以理解的原因(与Alpha服务器的交互失败)。但是,测试模式失败,原因是“未定义名称‘bob’”
当然,如果没有定义namebob
,那么如果bob
等于false,我们进入else
子句,运行bob
构造函数,将结果分配给变量bob
我现在无法调试它,因为导致Alpha模式失败的错误是暂时的,现在已经消失了,但我想理解这一点有两个原因:智力上的好奇心,以及在Alpha模式再次失败时使代码健壮
当然,如果没有定义名称bob,那么如果bob等于false
否。如果未定义bob
,则尝试使用它是一个错误
将bob=None
放在文件顶部,以确保在所有代码路径中都定义了它。执行此操作时:
bob = bob_module.Bob('alpha')
Python将不会到达分配阶段(分配失败函数调用的返回)-它将直接跳到异常捕获阶段
由于bob仍然未定义,因此当您稍后在语句中尝试使用它时:
if bob:
Python不知道什么是bob
,更不用说它的计算结果是True
还是False
,所以它会弹出另一个错误
如果您想要预定义bob
,而不管第一个函数的执行结果如何,只需在函数调用之前将None
分配给它,这样Python就知道bob
是None
,从而可以在If语句中正确地计算它,不管之前发生了什么
更新-如果您确实不想事先定义您的bob
,您仍然可以使用以下方法检查它的存在:
if "bob" in globals(): # replace globals() with locals() for the current scope
或者检查它是否同时存在并计算为True
:
if globals().get("bob", None): # replace globals() with locals() for the current scope
“当然,如果没有定义bob这个名字,那么如果bob等同于false”嗯,不,这就像说“如果外星人不存在,他们肯定是绿色的”。这没有任何意义。如果它不存在,该如何计算呢?
名称bob未定义
表示如果bob失败,则执行,而不是执行否则
。未定义与作为None
或False
不同,因为bob=bob
引发异常bob未设置。查看是否应该检查bob不是无:@rawing,什么?你的类比有什么相似之处?我的意思是,如果名称“bob”不存在,即如果变量不存在或尚未创建/填充,那么测试它应该返回false。这更像是说,如果外星人不存在,那么他们根本就没有颜色。谢谢,斯玛克斯。我给了zwer一个更完整的答案,但还是投了你一票。