不尝试使用任何属性时出现 AttributeError

Á. *_*zón 2 pickle python-3.x

早上好!

我正在使用在本地 PC 和 ssh 服务器中运行的代码(使用 python 3.8)。有一点,我正在使用下一段代码从泡菜加载数据:

from os.path  import exists
import _pickle as pickle

def load_pickle(pickle_file):

    if exists(pickle_file):
    
        with open(pickle_file, 'rb') as f:
            loaded_dic = pickle.load(f)

        return loaded_dic

    else:
        return 'Pickle not found'
Run Code Online (Sandbox Code Playgroud)

pickle_file是带有泡菜路径的字符串。如果pickle 存在,函数返回一个字典,如果它不存在,它返回字符串'Pickle not found'。

在我的本地 PC 中,代码运行良好,加载 dict 没有问题。但是,在 ssh 服务器中,理论上,dict 已加载,但是,如果我尝试访问它,只需键入loaded_dic,它就会引发以下错误:

AttributeError: 'NoneType' object has no attribute 'axes'
Run Code Online (Sandbox Code Playgroud)

因此,我的其余代码在尝试使用变量时失败loaded_dic

非常感谢您提前!

She*_*don 8

我有一个类似的问题。对我来说,当我将 Pandas DataFrames 存储在字典中并将这个 dict 保存为带有 Pandas 版本“1.1.1”的泡菜时,就会发生这种情况。

当我在另一台服务器上阅读带有 Pandas 版本“0.25.3”的字典泡菜时,我得到了同样的错误。

两者都有pickle 4.0版,除了升级到类似的pandas版本之外,我还没有解决方案。

我做了一个小例子,当我只存储一个 DataFrame 时也会发生这种情况,将它保存在一台机器上:

import pandas as pd
print("Pandas version", pd.__version__)

df = pd.DataFrame([1, 2, 3])

df.to_pickle('df.pkl')
Run Code Online (Sandbox Code Playgroud)

熊猫版本 1.1.1

然后将其加载到另一台机器上:

import pandas as pd
print("Pandas version", pd.__version__)

df = pd.read_pickle('df.pkl')

print(type(df))
Run Code Online (Sandbox Code Playgroud)

Pandas 版本 0.25.3
<class 'pandas.core.frame.DataFrame'>

print(len(df))
Run Code Online (Sandbox Code Playgroud)

导致此错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-9f6b6d8c3cd3> in <module>
----> 1 print(len(df))

/opt/conda/lib/python3.7/site-packages/pandas/core/frame.py in __len__(self)
    994         Returns length of info axis, but here we use the index.
    995         """
--> 996         return len(self.index)
    997 
    998     def dot(self, other):

/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py in __getattr__(self, name)
   5173             or name in self._accessors
   5174         ):
-> 5175             return object.__getattribute__(self, name)
   5176         else:
   5177             if self._info_axis._can_hold_identifiers_and_holds_name(name):

pandas/_libs/properties.pyx in pandas._libs.properties.AxisProperty.__get__()

AttributeError: 'NoneType' object has no attribute 'axes'
Run Code Online (Sandbox Code Playgroud)