Мой код работает в Python 3.8, но тот же код не работает в Python 3.5 - PullRequest
0 голосов
/ 07 августа 2020

мой код отлично работает в Python 3.8, но когда я переключаюсь на Python 3.5 в той же операционной системе, с тем же кодом и всем остальным, он начинает выбрасывать «SyntaxError: неверный синтаксис».

Вот ошибка и часть кода, которая, как я думаю, связана с ошибкой:

Traceback (most recent call last):
  File "pwb.py", line 390, in <module>
    if not main():
  File "pwb.py", line 385, in main
    file_package)
  File "pwb.py", line 100, in run_python_file
    exec(compile(source, filename, 'exec', dont_inherit=True),
  File ".\scripts\signbot.py", line 83
    namespace: int
             ^
SyntaxError: invalid syntax
CRITICAL: Exiting due to uncaught exception <class 'SyntaxError'>

А вот часть кода:

@dataclass
class RevisionInfo:
    namespace: int
    title: str
    type: str
    bot: bool
    comment: str
    user: str
    oldRevision: Optional[int]
    newRevision: int
    timestamp: int

Извините, если заголовок вопроса не указан c, но у меня проблемы с работой этого кода в Python 3.5. Сервер, на котором я собираюсь запустить этот код, поддерживает только Python 3.5, поэтому мне нужно, чтобы это работало с 3.5. Спасибо.

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Здесь есть как минимум две проблемы:

  1. Аннотации переменных были новыми в Python 3.6.

  2. Модуль dataclasses был новым в Python 3.7.

Либо используйте Python 3.7 или выше, либо перепишите свой код, чтобы он не полагаться на классы данных и аннотации переменных.

Это одна из многих причин, по которым рекомендуется использовать в разработке ту же версию Python, которую вы собираетесь использовать в производстве. Вы можете избежать написания кода, который не будет работать на вашем сервере.

0 голосов
/ 07 августа 2020

Одна новая интересная функция, входящая в Python 3.7, - это класс данных. вы не можете использовать его в python 3.5. Вы должны использовать традиционный способ и использовать конструктор:

class Mapping:
def __init__(self, iterable):
    self.items_list = []
    self.__update(iterable)

def update(self, iterable):
    for item in iterable:
        self.items_list.append(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...