这是我教科书中的一个问题,您在其中创建了一个程序,该程序可以对文本文件中的电子邮件进行直方图处理(它们始终是第二个单词)。
handle = open("mbox-short.txt")
senders = {}
for line in handle:
if line.startswith('From'):
emails = line.split()
if len(emails) < 3: continue
email = emails[1]
senders[email] = senders.get(email , 0) + 1
bigsender = None
bigcount = None
for sender,times in senders.items():
if bigcount < times:
bigcount = times
bigsender = sender
print(bigsender, bigcount)
但是当我运行它时,它会产生一个错误:
TypeError: '<' not supported between instances of 'NoneType' and 'int'
当我将最后一个条件更改为:
if bigcount is None or bigcount < times:
我们是否仍在将bigcount与时间进行比较,我不知道发生了什么变化?
答案 0 :(得分:0)
写if bigcount is None or bigcount < times
时有两个独立的条件:bigcount is None
和bigcount < times
。如果我们按顺序进行,则bigcount is None
被评估为true
。因为bigcount < times
不可能取任何可能使整行错误的值(因为true or some_boolean
对于some_boolean
的任何可能值始终为true),所以评估短路和不会评估第二条语句,因此永远不会有机会产生类型错误。
换句话说,bigcount < times
会产生错误,因为您无法比较bigcount
和times
,但是在您的第二个示例中,从未评估任何代码。