use*_*629 1 python evaluation if-statement truthiness
我有以下Python代码:
if bedrooms: # bedrooms exists
.....
else: # BEDROOMS DOES NOT EXIST
bn = "BEDROOMS DOES NOT EXIST"
Run Code Online (Sandbox Code Playgroud)
我在我的调试器中单步执行它,并注意到即使bedroom == 0流程跳转到else语句.
为了测试这个我试过:
>>> bedrooms
0.0
>>> type(bedrooms)
<type 'float'>
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?
0始终False在Python中求值:
>>> bool(0)
False
>>> bool(0.0)
False
>>> not 0
True
>>>
Run Code Online (Sandbox Code Playgroud)
因此,这样做:
if 0:
...
else:
...
Run Code Online (Sandbox Code Playgroud)
将始终导致else块被执行.
有关评估结果的完整列表False,请参阅Python文档中的真值测试.
如果要检查是否bedrooms已定义,则可以使用try/except块和catch来获取NameError(当使用不存在的名称时会引发该块):
try:
bedrooms
except NameError:
# bedrooms is not defined
Run Code Online (Sandbox Code Playgroud)
但这就引出了为什么你需要首先做到这一点的问题.如果它涉及动态变量名,那么我想说这些被大多数Python程序员认为是一种不好的做法,应该避免.它们很快就会导致维护问题,并且很容易忘记创建的名称.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |