2012-05-03 134 views
0

我是一个老式的Pascal程序员,OOP和Python的新手,所以请耐心等待......我有一本关于Python的书,我先在这里搜索(尽管很多类似的线程 - 没有检查每一个)...Python import导致语法错误

我试图编写一个程序,包括其他人在我公司写的现有模块。根据我的Python书,我应该能够导入整个模块或只是特定的类。这本书说,当使用'import'时,它实际上运行指定的代码(不像我在Pascal中习惯的INHERIT)。

我有模块在这种结构中,mod.py,我想用:

from x.y.z import stuff 

class c1(superclass): 
    def func1(self): 
     .... 
    def func2(self, db): 
     .... 
     with self.db as handler: 
      .... 

,我已经有了一个基本的脚本,test.py,这不只是这一点:

from mod import c1 

print "Hello" 

当我执行“蟒蛇test.py”,我得到错误信息:

'with self.db as handler' - invalid syntax 

我想我失去了一些东西根本她e,所以任何帮助非常感激。

+0

我怀疑你的'self.db'没有实现[上下文管理器协议](http://docs.python.org/reference/datamodel.html#context-managers),还是它? –

+0

也可能是因为Python的这种语法太旧了 - Python 2.4仍然存在于某些地方。这是哪个版本? –

+0

您的错误表明您将with语句放在引号中,这是正确的吗?你使用的是什么版本的Python?你也应该用'mod.py'的全部内容更新这个问题 –

回答

2

您已经修改了错误信息,但我认为它看起来像

File "mod.py", line 8 
    with self.db as handler: 
     ^
SyntaxError: invalid syntax 

这意味着你的Python版本太旧知道with statement。更新到支持python 2.6+的实现。

在Python 2.5,你也可以在mod.py顶部添加__future__ declaration,像这样:

from __future__ import with_statement 
+0

是的,那是我的错误。嗯,我已经有了一个可以使用的环境,而且我无法控制安装版本 - 看起来很奇怪,但是我会查看它......非常感谢...... – Nelmo

+0

好的<我只有2.4 ...会尝试让它改变 - 很多再次感谢... – Nelmo

2

在Python 2.5中,with语句默认不可用。但它在那里! :-)尝试添加

from __future__ import with_statement

您mod.py或使用Python 2.6+。

+0

新手问题 - 我如何知道我有什么版本? (我在Linux服务器上) – Nelmo

+0

啊,发现它是v2.4.3 - 听起来很老... – Nelmo

0

考虑是什么线貌似和错误是一个语法之一,我会看看在它之前的行,并寻找无与伦比的大括号或引号。