【发布时间】:2018-08-03 10:43:03
【问题描述】:
我有一个奇怪的情况:
class SomeClass(object):
def __init__(self, data):
self.data = {}
self.data = data
old_data_name = "SOURCE" # self.data[old_data_name] = a list of values
try:
self.data[old_data_name] = [1,2,3,4]
except Exception as e:
print(str(e))
new_data_name = "NEW" # a name
self.data[new_data_name] = numpy.mean(self.data[old_data_name])
所以这段代码在 Windows 上完美运行 - 我已经逐条调试了这条语句并验证了它。
当我将代码部署到 linux 服务器上时。它给我一个KeyError: old_data_name
我确信数据正在进入不应该发生关键错误的地步。 为什么 python 在 Linux 和 Windows 上的行为如此不同?
【问题讨论】:
-
你确定操作系统有这个问题吗?你在两台机器上使用的 python 版本是什么?
-
两个版本都是 3.6 - linux 完全跳过了 try 代码。没有任何例外。它在 Windows 中运行良好。我正在使用 Ubuntu 16.04 pip3 python3。 Windows 环境为 10
-
您也可以在 try-catch 块中检查
old_data_name,但之后您只需在numpy.mean(self.data[old_data_name])中获取它。 -
@LevZakharov 问题不在于检查。问题是在 Ubuntu 中它完全跳过了 try: 代码(我认为这是一个特定于平台的错误)
-
KeyError: old_data_name意味着您的代码正在执行与self.data["old_data_name"]等效的操作。 KeyError 给出了无法找到的键的值,不是它存储的变量的名称。
标签: python python-3.x windows-10 ubuntu-16.04 keyerror