2013-07-17 65 views
-5
import sys 

from cclib.parser import ccopen 

from cclib.bridge import makeopenbabel 

import openbabel as ob 


parser =3D ccopen(sys.argv[1]) 
data =3D parser.parse() 

distort =3D data.atomcoords[0] - data.vibdisps[0] 

obmol =3D makeopenbabel(distort, data.atomnos) 

obconv =3D ob.OBConversion() 

ok =3D obconv.SetOutFormat("XYZ") 

obconv.WriteFile(obmol, "distorted.xyz")` 

這個簡單的Python腳本提供了語法錯誤,就像下面解析器= 3D語法錯誤

"test.py", line 7 
> parser = 3D ccopen(sys.argv[1]) 
>   ^
>SyntaxError: invalid syntax" 

誰能幫助理清了這一點。謝謝

+1

爲什麼隨便插入隨機'3D'? – TerryA

+0

看起來像複製/粘貼編碼錯誤。修復語法。 – Mat

+0

看起來像史詩複製粘貼確實失敗 –

回答

4

這看起來像quoted-printable encoding,它用於電子郵件。您的Python源代碼不應使用帶引號的可打印編碼,因此您需要手動解碼,通過再次獲取源代碼而不使用編碼,或使用a decoder

正如你所見,從example on Wikipedia,=3D解碼爲=。您也可以通過Python中的chr(int('3D', 16))進行驗證,該代碼將3D解釋爲十六進制值(基數爲16),並查找由該數字表示的ASCII字符。

-2

雖然這會修復代碼。如果因缺乏圖書館而導致錯誤,我不會感到驚訝。

import sys 
from cclib.parser import ccopen 
from cclib.bridge import makeopenbabel 
import openbabel as ob 


parser = ccopen(sys.argv[1]) 
data = parser.parse() 
distort = data.atomcoords[0] - data.vibdisps[0] 
obmol = makeopenbabel(distort, data.atomnos) 
obconv = ob.OBConversion() 
ok = obconv.SetOutFormat("XYZ") 
obconv.WriteFile(obmol, "distorted.xyz")` 
+0

-1:發佈糾正的源代碼w/o告訴問題是什麼(或試圖瞭解'= 3d's來自何處)將不會幫助一般觀衆。 – kay

+0

感謝您指出@Kay。我認爲代碼是從郵件中複製出來的。因此= 3d看起來像那個工件 – djinn

+0

感謝所有的建議,但刪除3D返回與以下錯誤「File」test.py「,第7行,在 parser = ccopen(sys.argv [1]) IndexError:列表索引超出範圍 – user2590278