Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python服务器类型/浮点捕获_Python_Server - Fatal编程技术网

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

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