首页 > 解决方案 > TypeError:预期的字符串或类似字节的对象,适用于服务器但不适用于 PC

问题描述

介绍

我对用 python 3.4.2 编写的 python 程序有问题。一开始我想说,这不是我的程序。
当我通过 SSH 连接服务器并编译它时,它工作得很好。

服务器和PC规格

在此处输入图像描述

...在我的电脑上: 我有不同的 Python 版本,但我无法在 3.4.2 编译它,因为我需要的这个特定版本没有打字模块。我不知道GCC 版本是否会导致这个问题,但我尝试了不同的版本。 我已经下载了它,并尝试自己编译它。我以完全相同的方式运行它。
在此处输入图像描述




真正的问题

   Traceback (most recent call last):
  File "gads.py", line 28, in <module>
    lists = list_working.ListWorking(files_data)
  File "/home/grzesiek/googleads/lib/list_working.py", line 43, in __init__
    self._acc = self._split_str_list(list_data['accepted']['content'])
  File "/home/grzesiek/googleads/lib/common.py", line 69, in _split_str_list
    splited = re.split(separator, content)
  File "/usr/local/lib/python3.5/re.py", line 203, in split
    return _compile(pattern, flags).split(string, maxsplit)
TypeError: expected string or bytes-like object

到目前为止,我知道ListWorking(files_data)传递了一些字典文件,最后当我想使用正则表达式时它会引发错误。但我不能将这些字典更改为字符串或列表,因为它会编译,但会删除我提供给ListWorking()

的数据 这是我尝试更改的代码片段:

 def __init__(self, list_data: dict) -> None:
        self._acc = self._split_str_list(list_data['accepted']['content'])
        self._acc = self._del_dup(self._acc)
        self._ign = self._split_str_list(list_data['ignored']['content'])
        self._ign = self._del_dup(self._ign)
        self._pro = self._split_str_list(list_data['protected']['content'])
        self._pro = self._del_dup(self._pro)
        self._fign = self._split_str_list(list_data['full_ignored']['content'])
        self._fign = self._del_dup(self._fign)
        self._key = self._split_str_list(list_data['keywords']['content'])
        self._key = self._del_dup(self._key)
        self._unk = self._split_str_list(list_data['unknown']['content'])
        self._unk = self._del_dup(self._unk)
        self._sw = self._split_str_list(list_data['stopwords']['content'])

最后一个错误发生的地方:

def _split_str_list(content: str, separator: str = '\n') -> list:
    """Split string to list"""
    splited = re.split(separator, content)
    splited = list(x.strip() for x in splited)
    splited = list(filter(None, splited))
    return splited

此外,在 Python 3.4.2 中,它会出现import typing并抛出错误,因为在这个版本的 Python 中没有输入库。

那么 - 怎么可能在 Linux 服务器上正常工作,但在我的 PC 上却不行?

标签: pythonregexlinuxserver

解决方案


好吧,答案比我想象的要简单得多......我只需要安装正确版本的enca,如果缺少某些东西,代码作者没有写具体信息,所以很难找到,因为整个项目有大约 5000 行代码,而 enca 仅由一个函数使用。
它与 Linux 或 GCC 无关。


推荐阅读