flake8 - синтаксическая ошибка E999 с аргументом метакласса python3 - PullRequest
0 голосов
/ 09 октября 2018

Я использую vim для разработки на python с flake8 в качестве линтера.Ниже приведен пример кода, содержащий метаклазы.Flake8 показывает ошибку E999 SyntaxError: недопустимый синтаксис (E) в строке class Spam(metaclass=MyMeta).Я использую python3, и это правильный синтаксис для указания пользовательских метаклассов в python3.

class MyMeta(type):

    def __new__(cls, clsname, bases, clsbody):
        upper_case = {}
        for k, v in clsbody.items():
            if not k.startswith('__'):
                upper_case[k.upper()] = v
        return super().__new__(cls, clsname, bases, upper_case)


class Spam(metaclass=MyMeta):
    foo = 'bar'

Есть ли способ это исправить?

1 Ответ

0 голосов
/ 12 ноября 2018

Ну, вы редактируете код Python3, и ваш flake8 явно проверяет синтаксис Python2.

Просматривая Интернет, простой способ заставить flake8 проверить Python3 - запустить его из Python3.

Вероятно, вы работаете в Linux или другом Unix (я понял подсказку по использованию VIM), поэтому, если flake8 установлена ​​для всей системы, удалите ее и установите в Python3 (в fedora и redhatish distros,это dnf uninstall python2-flake8 dnf install python3-flake8).

Более правильный подход может быть просто установить virtualenv для вашего проекта Python, с желаемой версией Python, установить flake8 внутри этого virtualenv, с помощью pip install flake8, а также запускайте VIM изнутри вашего virtualenv, чтобы любые скрипты Python или программы, которые он запускает, находились в одной среде, и даже такие вещи, как расширенное автоматическое заполнение, могли проверять библиотеки, которые фактически использует ваш проект.

...