Python: 导入时的语法错误

10 投票
4 回答
73605 浏览
提问于 2025-04-17 19:07

我有一个Python脚本,技术上叫做 /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/Adafruit_BMP085_example.py

这个脚本的第一行是

from Adafruit_BMP085 import BMP085

在这个文件夹里,还有一个叫做Adafruit_BMP085的Python文件,里面有一个叫做BMP085的函数。

我想在 /home/pi 里创建一个Python脚本,导入这个BMP085函数。

我试过:

from /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/Adafruit_BMP085 import BMP085

但是这给我带来了一个语法错误:

SyntaxError: invalid syntax

我尝试了各种不同的语法组合,但找不到一个能用的。

相关问题:

4 个回答

0

在我的情况下,问题是由以下几个因素造成的:

  1. 在一个模块中留下了一个未关闭的字符串(这就是错误的地方...)
  2. 在一个 try/except 块中导入这个模块

这个问题发生在使用 MicroPython 的设备上,症状如下:

(1) 从 REPL 提示符 输入 import mymodule 并没有显示任何问题

(2) 从我的主模块运行以下代码:

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

在 'import' 这一行出现了这个结果,但没有显示出具体的问题源头:

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

(3) 但是当我直接从主模块导入时,我发现了问题:

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

所以... 在用 try/except 包裹导入时要小心哦。

3

这个问题的标题很笼统,但内容其实是针对一个特定的import情况。

在我的情况下,我在进行一个非常标准的import操作时遇到了SyntaxError错误。这个错误直接指向了导入语句,让人很困惑。

实际上发生的事情是,被导入的模块里有一个(非常细微的)语法错误。修复了这个错误后,导入时的SyntaxError就解决了。

这让人很困惑,因为Python在导入行报告了SyntaxError,而不是直接指出内部模块的语法问题(我相信,有时候它会这样做);即使是一个通用的ImportError也会更有帮助。我浪费了时间以为是某个模块或路径命名的问题。

14

你需要把 /home/pi/Adafruit-Raspberry-Pi-Python-Code 这个路径加到模块搜索路径里,也就是 sys.path:

import sys

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

或者把 Adafruit_BMP085 这个包移动到一个已经在你 sys.path 中的目录里。

脚本所在的目录也是 sys.path 的一部分,所以你也可以运行:

$ cd /home/pi/Adafruit-Raspberry-Pi-Python-Code
$ cp Adafruit_BMP085/Adafruit_BMP085_example.py .
$ python Adafruit_BMP085_example.py

撰写回答