2012-05-03 155 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

考慮是什麼線貌似和錯誤是一個語法之一,我會看看在它之前的行,並尋找無與倫比的大括號或引號。