2013-07-17 33 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