当前位置: 首页 > 面试题库 >

Python相对导入导致SyntaxError异常

陆俭
2023-03-14
问题内容

根据python文档,自python 2.5开始支持相对导入和内部包引用。我当前正在运行Python
2.7.3。因此,我尝试在自己的程序包中实现此功能,以便将其用于更简单的导入。我很惊讶地发现它引发了SyntaxError异常,我希望有人可以帮助您找到原因。

我设置了一个测试目录进行测试:

tester
├── __init__.py
├── first_level.py
└── sub
    ├── __init__.py
    └── second_level.py

两个__init__.py模块都为空。其他模块是:

# first_level.py
print "This is the first level of the package"
# sub/second_level.py
import ..first_level
print "This is the second level"

当我尝试导入second_level模块时,出现以下错误:

Python 2.7.3 (default, Aug  1 2012, 14:42:42) 
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.57))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Welcome!
>>> import tester
>>> import tester.sub.second_level
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tester/sub/second_level.py", line 1
    import ..first_level
           ^
SyntaxError: invalid syntax

我希望这两行可以一个接一个地打印,但是却引发了异常。那么,我导入错误吗?你还有其它的想法吗。


问题答案:

您不能导入类似的模块。 import ..blah是无效的导入语法。你需要做from .. import first_level



 类似资料:
  • 问题内容: 我有一个简单的Python问题,我的大脑停滞不前。此代码段有效。但是,当我用phoneNumber替换“ 258 494-3929”时,出现以下错误: 顺便说一句,我没有和尝试使用的情况下 我还能缺少什么? 问题答案: 您应该使用而不是,而不必调用,因为此函数本身返回一个字符串:

  • 问题内容: 大家好-我正在用Python中的相关知识来表达自己的观点。我已经阅读了30篇文档,并在SO和其他论坛上阅读了很多帖子-似乎还是行不通。 我的目录结构目前看起来像这样 我希望expander.py和language_id.py可以访问功能模块。我运行python main.py,可以从components.expander import 和components.language_id i

  • 问题内容: 存在的问题是:在Windows 7、32位Python 2.7.3中,如何解决此“尝试以非软件包方式进行相对导入”消息?我在上构建了该软件包的精确副本: 导入是从控制台完成的。 我确实在相应的模块中创建了名为垃圾邮件和鸡蛋的函数。自然,它不起作用。答案显然是在我列出的第4个网址中,但对我来说都是校友。我访问的其中一个URL上有此响应: 相对导入使用模块的名称属性来确定该模块在包层次结构

  • 问题内容: 我想从同一目录中的另一个文件导入函数。 有时它对我有用,但有时我得到: 有时它可与一起使用,但有时我也会得到: 我不了解这里的逻辑,也找不到任何解释。这看起来完全是随机的。 有人可以向我解释所有这些背后的逻辑是什么? 问题答案: 不幸的是,该模块需要位于程序包内部,有时还需要作为脚本运行。知道如何实现吗? 像这样的布局很普遍… … mymodule.py像这样… ......一个myo

  • 我想从同一目录中的另一个文件导入一个函数。 有时使用对我有效,但有时我会得到一个: 有时它与一起工作,但有时我也会得到一个: 我不明白这里的逻辑,也找不到任何解释。这看起来完全是随机的。 谁能给我解释一下这一切背后的逻辑是什么?

  • 根据这个答案,您可以使用来使用类似这样的相对导入: 为什么相对导入不适用于sklearn。特征提取。文本 我验证了是一个具有以下功能的模块: 编辑 “不工作”,我的意思是它不导入模块。 我正在使用Python 3.4 绝对方式工作: 相对方式不: