Dans cet extrait de code,
def add(x:int, y:int) -> int:
return x + y
il y a des annotations de fonction qui ne sont prises en charge qu'après python 3.0
Lorsque j'exécute flake8 pour ce code python:
$ flake8 7.3.py -vv
checking 7.3.py
def add(x: int, y: int) -> int:
return x + y
7.3.py:1:11: E901 SyntaxError: invalid syntax
J'ai eu une erreur de syntaxe non valide, mais cela devrait être une syntaxe valide. Comment puis-je utiliser flake8 pour vérifier la syntaxe qui n'est prise en charge que dans Python 3.x?
Voir: https://bugs.launchpad.net/pyflakes/+bug/9892
NB: Bien que ce rapport de bogue indique un certain niveau de résolution, tester la dernière version de pyflakes 0.8.1
ce manque de Python 3 annotations existe toujours.
Je suppose que vous devrez déposer une nouvelle demande de fonctionnalité distincte auprès de pyflakes.
$ cat - > foo.py
def add(x:int, y:int) -> int:
return x + y
^D
$ pyflakes --version
0.8.1
$ pyflakes foo.py
foo.py:1:10: invalid syntax
def add(x:int, y:int) -> int:
^
[~ # ~] mise à jour [~ # ~] ( 20140514):
Comme il s'avère que la vraie réponse à ce problème est d'exécuter pyflakes
ou flake8
sous Python 3.x au lieu de Python 2.x. Cela a du sens :)
Alors faites quelque chose comme ça:
/usr/bin/python3 -m pyflakes foo.py
J'ai la réponse sur reddit ( ici ):
Il utilise tout ce que flake8 est installé dans le Python dans votre chemin.
vous devez donc installer flake8 par pip3, pas pip.
sur OSX pour moi,
pip3 install flake8
cela fonctionne pour moi. :)
travaillé pour Mac + py2 + py3 + venv:
pip install flake8
flake8 --version
3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.5.0) CPython 2.7.14 on Darwin
pip3 install flake8
python3 -m flake8 --version
3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.6.0) CPython 3.6.1 on Darwin
python3 -m flake8 --exclude migrations --max-line-length=121
Vous devez vous assurer que vous utilisez flake8 de python3. Sur Linux, vous voudrez faire:
Sudo pip uninstall flake8
Sudo pip3 install flake8
Vous devriez probablement utiliser environnements virtuels (python3 -m venv venv; source venv/bin/activate
) ... De cette façon, 'python' et 'pip' utilisent ceux que vous voulez, par défaut ... Je dis juste.