10

I'm getting a SyntaxError when importing a module, and the error isn't clear nor helps me to solve the import issue.

I have a python script:
Adafruit_BMP085/Adafruit_BMP085_example.py

Also located in this directory is a python file named Adafruit_BMP085 that has a function BMP085.

The first line of Adafruit_BMP085_example.py is:

from Adafruit_BMP085 import BMP085

But this just gives me a syntax error:

SyntaxError: invalid syntax
0

4 Answers 4

15

You need to add the /home/pi/Adafruit-Raspberry-Pi-Python-Code path to the module search path in sys.path:

import sys

sys.path.append('/home/pi/Adafruit-Raspberry-Pi-Python-Code')
from Adafruit_BMP085 import BMP085

or move the Adafruit_BMP085 package to a directory already in your sys.path.

The directory of the script itself is also part of the sys.path, so you could also run:

$ cd /home/pi/Adafruit-Raspberry-Pi-Python-Code
$ cp Adafruit_BMP085/Adafruit_BMP085_example.py .
$ python Adafruit_BMP085_example.py
Sign up to request clarification or add additional context in comments.

1 Comment

How can changing sys.path fix a syntax error?
5

Sometimes, you can get a SyntaxError when having a very standard import scenario. The error can directly point at the import statement even if the import syntax itself is correct, very confusingly.

What is likely happening is that there is a (very subtle) syntax error in the module being imported. Fixing that error resolves the SyntaxError during import.

This is very confusing because Python can report SyntaxError on the import line, rather than forwarding to the internal module's syntax problem (which, I believe, sometimes it does); even a generic ImportError would be more helpful. It happened to me that I wasted time thinking it was some module/path naming issue, rather than a syntax issue in the module to be imported.

Comments

-1

In my case, the problem was a combination of

  1. leaving an open string in a module (the bug...)
  2. importing the module within a try/except block

It happened when using a device with MicroPython, and these were the symptoms:

(1) import mymodule from the REPL prompt didn't show any problem!

(2) running this code from my main module:

try:
    import mymodule
except Exception as e:
    print(e, '|', e.errno, '|', e.value, '|', e.args)

was giving this result at the 'import' line, without revealing the problematic source:

invalid syntax | invalid syntax | invalid syntax | ('invalid syntax',)

(3) but when I did a direct import from the main module, I found the problem:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
  File "mymodule.py", line 126

so... be careful when wrapping import with try/except

Comments

-2

I had the same problem. The problem first occured when upgrading to Jessie on RPI. The cause was probably within the pathing. Added below line to Python program:

sys.path.append('/home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085')

Now problem solved.

1 Comment

Updating to Jessie should not be affecting what statements python2 or python3 considers syntax errors. It should be operating system independent.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.