记录学习Biopython出现的一次重大bug

更新于 2016年12月20日 Python
我来说两句
0 2016年12月20日

按照中文教程
http://biopython-cn.readthedocs.io/zh_CN/latest/cn/chr09.html

代码如下:

<a class="toolbar_item command_help help" href="http://www.slyyc.asia/MyBlog/topics/256/#”>?

1
2
3
4
5
6
7
8
# -*- coding: cp936 -*-
from Bio import Entrez
Entrez.email="helen5200@163.com"
handle=Entrez.einfo(rettype="xml")
record=Entrez.read(handle)
ren=record.encode('utf-8')
print ren

========================================================
Traceback (most recent call last):
File “C:/Users/XX/Desktop/1.py”, line 6, in <module>
record=Entrez.read(handle)
File “C:\Python27\lib\site-packages\Bio\Entrez__init__.py”, line 450, in read
record = handler.read(handle)
File “C:\Python27\lib\site-packages\Bio\Entrez\Parser.py”, line 233, in read
self.parser.ParseFile(handle)
File “C:\Python27\lib\site-packages\Bio\Entrez\Parser.py”, line 611, in externalEntityRefHandler
handle = self.open_dtd_file(filename)
File “C:\Python27\lib\site-packages\Bio\Entrez\Parser.py”, line 528, in open_dtd_file
path = os.path.join(DataHandler.local_dtd_dir, filename)
File “C:\Python27\lib\ntpath.py”, line 84, in join
result_path = result_path + p_path
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xcf in position 7: ordinal not in range(128)
尝试了很多种解决方法,但是都失败了,也尝试了
handle.read()能正常输出,换成Entrez.read()就报错!!!!!!!!!!!!!!!!

import sys
reload(sys)
sys.setdefaultencoding(‘’utf-8)
IDE直接不给任何结果,

==============================================================

解决方法:

换成Python3.5调试环境:

系统之前安装过3.5,后来系统就集成了两个IDE(GUI环境)可能原因是两个版本撞车,导致调试失败,按照这个思路,我把之前python2.7移除掉

重新安装python 3.5……….etc

重新安装numpy,pip install numpy。。。。。

重新安装biopython  pip install bippython………

出错,提示找不到指定模块,

换个思路,下载1.6.8的tar包,解压,直接将Bio和Bio.SQL包复制到sitepacks文件夹下面

test

from Bio import Entrez

正常不报错

OK

测试了代码:

Entrez.email=”helen5200@163.com
handle=Entrez.einfo(rettype=”xml”)
record=Entrez.read(handle)

一路OK

pass

pass

pass

搞了两三天居然是因为环境问题,看来有时候真的需要逆向思维

 

mark一下

kkds

于2016-12-19 17:46:20

回复