gpt4 book ai didi

Python 服务器 NoneType/float catch

转载 作者:行者123 更新时间:2023-12-01 01:37:24 25 4
gpt4 key购买 nike

我正在 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))

类型错误:不支持的操作数类型 -:“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")

编辑 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)  

类型错误:字符串格式化期间并非所有参数都已转换

最佳答案

正如您的错误消息所示,您对 calc_average(server) 的调用返回 None,并且您尝试从 server_time_differences[server]< 中减去其返回值 失败,因为 float 无法与 None 一起运算。

calc_average 的代码中可以明显看出,仅当发生 ZeroDivisionError 时,它才会返回 None,因为在除了 block 。您可能没有注意到打印消息 '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)

关于Python 服务器 NoneType/float catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com