2013-08-07 39 views
1

在MYDIR /檢驗/檢測/ pqtest.pyPython的錯誤

import os,sys 
lib_path = os.path.abspath('../../lib/mine') 
sys.path.append(lib_path) 

import Util    <---- get a traceback 
import string 
import random 

# my code 

Traceback (most recent call last): 
     File "pqtest.py", line 5 in ? 
      import Util 
     File "mydir/lib/mine/Util.py", line 89 
      yield v if l > 0 else ''      Error is point at if 

SyntaxError: invalid syntax 

然而,也有進口Util.py內mydir/lib/mine在沒有其他文件這個文件的任何問題。

那麼爲什麼當我從其他地方導入時,爲什麼會給我這個回溯呢,在這種情況下mydir/test/testing

產量v

語法錯誤,如果L> 0,否則, ''

def expand(): 
    for l,v in zip(field,val): 
     yield l 
     yield v if l > 0 else '' 

這是很好的Python 2.5的,但不是爲Python 2.4

我假設我需要告訴pqtest.py使用Python 2.5的,但不知道如何

+1

你已經跳過異常追蹤的最重要的iportant部分:實際異常... – l4mpi

+0

我猜錯誤是'沒有這樣的模塊'? – Stephan

+0

@Stephan語法錯誤 – ealeon

回答

1

,很明顯的事情要做的是重寫代碼,使其兼容2.4。從一個評論,不改變Util.py的唯一原因是:

...其他人依賴它作爲python 2.5。

但是,只要您的新代碼對原始代碼具有與Python 2.5+完全相同的效果,這不是問題。

例如,而不是這樣的:

def expand(): 
    for l,v in zip(field,val): 
     yield l 
     yield v if l > 0 else '' 

這樣做:

def expand(): 
    for l,v in zip(field,val): 
     yield l 
     if l > 0: 
      yield v 
     else: 
      yield '' 

現在誰是取決於它作爲Python 2.5的其他人不會有任何變化,但它也將工作在2.4。

+0

這是我的原始答案,我被告知「改變它不是一個選項」 – Stephan

+0

@Stephan:[您的原始答案](http://stackoverflow.com/revisions/18111911/1)更改了'expand'的API一種會破壞Utils.py所有用戶的方式;我的行爲完全一樣。另外請注意,OP說改變它是「不是一個選項*,因爲其他人依賴它爲python 2.5 *」。這種改變允許其他人繼續依靠python 2.5,而不需要修改他們的代碼。 – abarnert

+0

錯誤的一個,我編輯前的原始文件與您顯示的語句相同 – Stephan

1

執行python本身通過鍵入

python 

如果SH低於2.5,那麼你不能使用三元條件語法。那是在2.5

介紹如果它確實表明2.5可以做到這一點

python pqtest.py 

迫使pqtest.py如果你願意改變Util.py使用該版本

+0

啊好吧,但如果python是2.4呢? – ealeon

+0

你告訴我它是什麼@ealeon – Stephan

+0

@ealeon如果你在輸入python的時候看到2.5,這個解決方案將會爲你工作。讓我知道如果它不 – Stephan