Python服务器无类型/浮动捕获

时间:2018-09-11 01:20:59

标签: python server

我正在测试python上的服务器差异。当我仅使用1台服务器进行测试时,会出现错误。有没有办法尝试/捕获此问题:

# 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的新手。

编辑:这是我的calc_average函数。我认为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")

edit 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:在字符串格式化期间并非所有参数都已转换

1 个答案:

答案 0 :(得分:2)

如错误消息所示,您对calc_average(server)的调用返回了None,并且您尝试从server_time_differences[server]中减去其返回值的尝试失败了,因为浮点数不能与{{ 1}}。

从您的None代码来看,很明显,只有在calc_average出现时,它才会返回None,因为ZeroDivisionError块中没有显式的return语句。您可能没有注意到正在打印消息except的原因可能是因为它与'error'异常的回溯混合在一起,因为标准错误在标准输出时(在您的ZeroDivisionError消息中没有缓冲)去)被缓冲。

由于错误的性质,'error'发生时不应返回任何值,因为对于调用者而言,继续进行有意义的计算没有任何意义。相反,它应该重新引发一个更友好的异常,并让调用者捕获该异常并以更优美的方式打印错误消息:

ZeroDivisionError