试图弄清楚为什么我在这里得到两个不同的结果(一个是错误的)。以下是运行的代码:
hta = 2.13
visitor_team_ratings = [21.53]
home_team_ratings = [None]
difference = []
for a, b in zip(visitor_team_ratings, home_team_ratings):
if a and b:
difference.append(a - (b + float(hta)))
else:
difference.append('NO RATING')
print(difference)
这打印出“没有评价”,但我很难理解为什么会这样做。 None与空列表不同,为什么python会下降到else
语句。
这是抛出错误的类似代码。与上面的工作代码相同的变量/列表:
if visitor_team_ratings and home_team_ratings:
difference.append((visitor_team_ratings[0] - (home_team_ratings[0] + float(hta))))
else:
difference.append('NO RATING')
print(difference)
错误是:TypeError: unsupported operand type(s) for +: 'NoneType' and 'float'
我不确定我理解为什么一个有效而另一个无效。而那个有效的,我甚至不确定我理解它为什么这样做。我一直在我的程序中使用第一个代码块...
答案 0 :(得分:2)
问题主要在于:
[None]
在第一个版本中,当你写
home_team_ratings = [None]
if a and b
是b
,因为它来自None
。因此home_team_ratings
条件为假。
在第二个版本中
if
这种情况属实,因为两个列表都不为空。
但是if visitor_team_ratings and home_team_ratings:
会引发异常,因为您试图将(home_team_ratings[0] + float(hta))
添加到浮点数。
答案 1 :(得分:2)
在None
中查看列表。
然而,如果您使用:if visitor_team_ratings and home_team_ratings:̀
。然后你看一下列表中的元素。 (对应于第一个区块的if visitor_team_ratings[0] and home_team_ratings[0]:
和a
)
编辑我应该详细说明:
b
这是导致问题的原因。如果你看一下这个元素,那就是home_team_ratings = [None]
所以条件不会是真的。但是如果查看列表,那么None
将为True,因为两个列表都不为空。但是,if
之后会发出错误,因为它是home_team_ratings[0]:
。
答案 2 :(得分:0)
在第一个示例中,import numpy as np
import cv2
import gtk
import pygtk
import gobject
count=0
loop=0
cascPath = 'haarcascade_frontalface_default.xml'
faceCascade = cv2.CascadeClassifier(cascPath)
cap = cv2.VideoCapture('sample.mp4')
print (cap.isOpened())
的计算结果为False,因为if a and b
为False。在第二个示例中,列表bool(None)
的计算结果为True,因为它不是空的
答案 3 :(得分:0)
在第一个块中,您循环遍历列表的元素。在循环内部,您正在评估天气元素(a和b两者)是否真实。显然,没有什么是不正确的,因为它移动到了其他部分。
在第二部分中,您将评估两个列表是否为真。列表不为空,因此如果执行部分。