我正在python上测试服务器差异。当我只使用一台服务器进行测试时,会出现错误。有没有办法尝试/抓住这个:
# Discrepancy = abs(this server's difference - average of differences of all the other servers
for server in server_time_differences:
discrepancies[server] = abs(server_time_differences[server] - calc_average(server))
这是我得到的错误:
discrepancies[server] = abs(server_time_differences[server] - calc_average(server))
TypeError:不支持-:“float”和“NoneType”的操作数类型
如果你需要更多的信息,请告诉我。谢谢你的帮助,我是Python新手
编辑:这是我的计算平均值函数。我想try/except是不正确的
# Function that calculates average time difference for the servers
def calc_average(server_name):
#Temporarily copies time differences to use for this function
temp = server_time_differences.copy()
temp.pop(server_name)
sum_ = sum(temp.values())
# Average = sum of servers divided by number of used servers
try:
return sum_ / len(temp.keys())
except ZeroDivisionError:
print("error")
编辑2:新错误 好吧,我还是有个错误:
in calc_average return sum_ / len(temp.keys())
ZeroDivisionError:被零除
在处理上述异常时,发生了另一个异常:
in <module> discrepancies[server] = abs(server_time_differences[server] - calc_average(server))
以及
in calc_average raise RuntimeError ('No other servers to compare with ' %server_name)
TypeError:不是所有参数都在字符串格式化期间转换
如错误消息所示,对
calc_average(server)
的调用返回None
,而从server_time_differences[server]
中减去其返回值的尝试失败,因为浮点数不能与None
一起操作从
calc_average
的代码中可以明显看出,它只会在ZeroDivisionError
发生时返回None
,因为except
块中没有显式的return语句。您可能没有注意到正在打印的消息'error'
可能是因为它与ZeroDivisionError
异常的跟踪混合在一起,因为标准错误在缓冲标准输出(您的'error'
消息所在的位置)时是无缓冲的由于错误的性质,当
ZeroDivisionError
发生时不应返回值,因为调用方继续有意义的计算没有任何值是有意义的。相反,它应该重新引发一个更友好的异常,并让调用方捕获该异常并以更优雅的方式打印错误消息:相关问题 更多 >
编程相关推荐