代码成功在一台机器上运行,但在另一台机器上产生“ TypeError:无法连接'str'和'int'对象”

时间:2019-06-06 15:44:27

标签: python netcdf4

我有一个脚本,该脚本利用Py-ART程序包读取机载气象雷达数据,然后对该数据进行质量控制。我会注意,我怀疑这不是该软件包的问题,​​否则我只是将一个问题发布到该仓库中...

此问题的令人困惑的方面是,代码在我的机器上(在Python 2.x和3.x中)都可以完美运行,尽管在Python 2.x的同事的机器上,它因以下错误而失败:

TypeError: cannot concatenate 'str' and 'int' objects

尝试执行此代码块的最后一行时触发错误:

az_raw = radar.azimuth['data'].data
roll = radar.roll['data'].data
azmth = az_raw + roll
azmth[azmth < 0] += 360

我从调查此问题中得出了一些潜在线索:

  1. 在我的机器上,代码正常运行,az_rawroll变量被读为float32类型的数组,而在我同事的机器上,这些变量具有Buffer类型。将roll的内容添加到az_raw(逐个元素)后,azmth仍作为float32的数组保留在我的计算机上,并变成{{ 1}}。

  2. Py-ART使用netCDF4包从netCDF输入文件中读取数据-也许这里存在与机器和/或版本相关的问题?

  3. 无论输入什么文件,问题仍然存在(即,我们尝试了几次,并且来自不同数据收集期/项目的结果相同。

因此,最终,我的问题归结为一台机器上出现str的{​​{1}}而不是另一台机器上的所有其他东西都相同的情况?我想两台机器之间可能存在依赖版本差异(Py-ART,netCDF4等),但是我不清楚这将如何导致这种问题。以前有没有人看过类似的东西?

1 个答案:

答案 0 :(得分:1)

同意Norrius。存在依赖性问题。如何在每台计算机上安装Py-ART?确保一切正常的最佳方法是使用Conda Environment,以便您可以控制(并隔离)依赖性。

实际上,现在我看一下错误(缓冲区与浮动),我知道您同事的机器已经过时了软件包,包括Numpy。如果他更新了numpy(这是IO领域的问题,我认为https://docs.scipy.org/doc/numpy/reference/generated/numpy.frombuffer.html,而不是fromstring)

还请注意,很快将取消对Python 2.x的Py-ART支持。我们将于10月发布的下一个版本将关闭2.x版CI。