2015-04-23 148 views
1

我測試了一個使用Python(2.7.8)腳本創建動態內容的基於Web的應用程序。獲取Python腳本在舊版本上運行時出錯

我解析了一些XML數據並對其執行了幾個操作。

其中一項操作需要搜索使用ElementTreefindall(xpath)函數的某些類型的數據。

現在我需要部署的地方是一個Linux版本的Python,它具有較舊版本的Python(2.6.6)。

由於較舊的ElementTree沒有某些功能,我遇到了一些麻煩。

我跟着這個ElementTree SyntaxError: expected path separator ([)。我從2.7.8複製ElementTree到新盒子並從那裏導入。

它進口的罰款,但現在我得到一個不同的錯誤,如下所示:

Traceback (most recent call last): 
    File "./filename_python.py", line 117, in <module> 
    for ch in child.findall(xpath): 
    File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 293, in findall 
    return list(iterfind(elem, path, namespaces)) 
    File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 194, in select 
    if "".join(e.itertext()) == value: 
AttributeError: itertext 

我無法更新上那個盒子的Python版本,我不能添加任何模塊,因此任何新的東西,必須在本地進口。

任何幫助表示讚賞。

謝謝。

回答

0

在我看來,你已經正確地向後移植了2.7.x版本庫。看看堆棧跟蹤,你會看到它仍然是指圖書館在你的Python 2.6.x的路徑:

/usr/lib64/python2.6/xml/etree/ElementPath.py 

你也可以考慮LXML - 你不需要安裝它作爲一個系統圖書館。從git repository here簡單克隆,並將代碼複製到您的項目目錄中。

+0

是否需要更改我的初始代碼才能使用,或者從lxml.etree導入ElementTree那麼簡單? 另外我應該提到,我正在使用cElementTree而不是ElementTree來實現更快的實現。 無論如何,我可以正確地backport庫而不是使用lxml嗎? –

+0

lxml不兼容,所以是的,您需要更改您的代碼。如果這不是一個好的解決方案,請查看爲什麼使用錯誤的ElementPath.py(您沒有使用本地導入的2.7版本)。 –

相關問題