Python服务器类型/浮点捕获
我正在python上测试服务器差异。当我只使用一台服务器进行测试时,会出现错误。有没有一种方法可以尝试/捕获:Python服务器类型/浮点捕获,python,server,Python,Server,我正在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[ser
# 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())
ZeroDivision错误:被零除
在处理上述异常期间,发生了另一个异常:
in <module> discrepancies[server] = abs(server_time_differences[server] - calc_average(server))
TypeError:并非在字符串格式化过程中转换的所有参数如错误消息所示,对
calc\u average(server)
的调用返回None
,并尝试从server\u时间差[server]中减去其返回值
失败,因为浮点数不能与无
一起操作
从calc_average
的代码中可以明显看出,只有当发生ZeroDivisionError
时,它才会返回None
,因为块中除了之外没有显式的返回语句。您可能没有注意到正在打印的消息'error'
可能是因为它与ZeroDivisionError
异常的回溯混合在一起,因为在缓冲标准输出(您的'error'
消息所在的位置)时,标准错误被取消缓冲
由于错误的性质,在发生ZeroDivisionError
时不应返回值,因为调用者继续进行有意义的计算没有意义。相反,它应该重新引发一个更友好的异常,让调用方捕获该异常并以更优雅的方式打印错误消息:
def calc_average(server_name):
temp = server_time_differences.copy()
temp.pop(server_name)
sum_ = sum(temp.values())
try:
return sum_ / len(temp.keys())
except ZeroDivisionError:
raise RuntimeError('No other server available to calculate average server time difference with %s.' % server_name)
for server in server_time_differences:
try:
discrepancies[server] = abs(server_time_differences[server] - calc_average(server))
except RuntimeError as e:
print(e)
抱歉,我试图发布我的calc_average函数。如果您不介意查看我的calc_average函数,请编辑我的原始问题。好的,所以我仍然遇到一个错误:在calc_average返回和中(temp.keys())。ZeroDivisionError:在处理上述异常期间,发生了另一个异常:在差异[server]=abs(服务器时间差异[server]-calc_average(服务器)),在calc_average raise RuntimeError('没有其他服务器与'%server_name'进行比较)TypeError:不是所有的参数都在字符串格式转换过程中转换。我只是想在原始问题中发布新的错误。。。更新了原始问题hmmm,,,我删除了“%server\u name”,错误消失了。您看到打印出来的错误了吗?如果您捕获到异常,您必须返回一些内容否,无法打印出的错误是calc_average
的正确缩进级别,还是复制到SO上时出错?是的,只是出错了*
def calc_average(server_name):
temp = server_time_differences.copy()
temp.pop(server_name)
sum_ = sum(temp.values())
try:
return sum_ / len(temp.keys())
except ZeroDivisionError:
raise RuntimeError('No other server available to calculate average server time difference with %s.' % server_name)
for server in server_time_differences:
try:
discrepancies[server] = abs(server_time_differences[server] - calc_average(server))
except RuntimeError as e:
print(e)