Question

In this code snippet,

def add(x:int, y:int) -> int:
    return x + y

there are function annotations that are only supported after python 3.0

When I execute flake8 for this python code:

$ 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

I got the invalid syntax error, but it should be valid syntax. How can I use flake8 to check the syntax that is only supported in Python 3.x?

Was it helpful?

Solution

See: https://bugs.launchpad.net/pyflakes/+bug/989203

NB: Whilst this bug report indicates some level of resolution, testing the latest version of pyflakes 0.8.1 this lack of Python 3 Annotations still exists.

I guess you'd have to file a separate new feature request to pyflakes.

pyflakes Bugs

$ 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:
         ^

UPDATE (20140514):

As it turns out the actual answer to this problem is to run pyflakes or flake8 under Python 3.x instead of Python 2.x. It makes sense :)

So do something like this:

/usr/bin/python3 -m pyflakes foo.py

See: http://codepad.org/9BKxSZaD

OTHER TIPS

I've got the answer on reddit(here):

It uses whatever flake8 is installed in the Python in your path.

so you need to install flake8 by pip3, not pip.

on OSX for me,

pip3 install flake8

this works for me. :)

worked for 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

You need to ensure you are using python3's flake8. On linux you'll want to do:

sudo pip uninstall flake8
sudo pip3 install flake8

Y'all probably should be using virtual environments (python3 -m venv venv; source venv/bin/activate)... That way, 'python' and 'pip' use the ones you want, by default... Just saying.

I had a similar issue and solved it by installing flake8 through python.

$ python --version
Python 3.8.3

$ python -m pip install flake8
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top