1. TypeError: 'builtin_function_or_method' object is not iterable
迭代对象有错误,有可能迭代的是系统默认的一些变量或对象。例如for line in input:
2. UnicodeEncodeError: 'ascii' codec can't encode characters in...
文件的编码问题。python3可能是环境语言的问题,需要手动配置下语言en_US.UTF-8;python2可以使用如下代码解决。
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
3. TclError: no display name and no $DISPLAY environment variable
最近由于编程的需要在Windows客户端使用Xshell软件通过SSH在远程的Linux上进行Python开发,在使用matplotlib模块绘图时,出现这个异常。解决方案如下——
在 from matplotlib import pylot 之前,添加代码:
import matplotlib as mpl
mpl.use('Agg')
from matplotlib import pylot
4. SSHException: Incompatible ssh peer (no acceptable kex algorithm)
最近使用python的paramiko模块,执行时会报这个错误。经过网上的查询及个人调试,发现是安装的paramiko模块版本太低。
主要涉及到三个模块:ecdsa、paramiko、pycrypto
linxu下可以通过pip freeze指令来查询一下安装的模块版本。经过调试成功之后的模块为:ecdsa 0.13;paramiko 1.18.4;pycrypto-2.6.1.tar.gz
5. TypeError: Object of type 'bytes' is not JSON serializable
最近进行了这样一个操作——从redis中取出列表list a,然后把list a存入一个空的字典tmp中,再通过json.dumps(tmp)将字典转换成字符串会报这样的错误,主要原因就是redis取出的列表其实是byte的格式。因此可以将列表list a中的每个元素都进行解码就可以了。具体实现如下:
#前面是redis的连接类redis_connect,最后返回r
r = redis.Redis(connection_pool=pool)
tmp = {}
tmp['liao'] = [item.decode('utf-8') for item in redis_connect.r.get('a')]
6. Redis:WRONGTYPE Operation against a key holding the wrong kind of value
首先应该明白报这个错误说明了你用的jedis方法与redis服务器中存储数据的类型存在冲突。例如:数据库中有一个key是列表进行存储的,使用的指令是lpush或者rpush,但是查询的过程中使用get就会报这样的错误,解决方案:使用lrange + key +0 -1
7. SyntaxError: Non-ASCII character '\xc3' in file pic2char.py on line 4, but coding declared
python 的默认编码文件是ACSII,而编辑器将文件保存为UTF-8格式的,只要文件中存在中文,就会产生该问题。
解决方法:在源代码第一行加入 # -*-coding:UTF-8 -*-
8. requests.packages.urllib3.exceptions.NewConnectionError:
当我们使用python的hdfs包进行上传和下载文件的时候,总会出现如下问题
requests.packages.urllib3.exceptions.NewConnectionError:
其实这主要是由于没有将各个集群节点的ip映射到/etc/hosts文件中
修改/etc/hosts文件,将各个集群节点ip映射加上即可,如博主所示
vim /etc/hosts
192.168.20.174 hadoop04
192.168.20.173 hadoop03
192.168.20.172 hadoop02
192.168.20.171 hadoop01
9. “str” object is not callable
当出现报错 XXX is not callable的时候,很有可能是你正在调用一个不能被调用的变量或对象,具体表现就是你调用函数、变量的方式错误。解决方案——可以尝试修改变量名或者函数名。
10. MongoClient opend before fork,Create MongoClient
提示的意思是MongoClient在fork之前开启了,官方文档指出:
PyMongo is not fork-safe. Care must be taken when using instances of MongoClient with fork(). Specifically, instances of MongoClient must not be copied from a parent process to a child process.
fork是启动新进程的方法,并且由于PyMongo不是进程安全的,所以不应该将该实例从父进程中复制到子进程当中。在这个flask应用中,flask使用gunicorn作为网关接口,在启动的时候会启动一个主进程和多个子进程,也就是master/workers,这个时候就出现了MongoClient实例在进程之间的传递。
为了解决这个问题,在实例化MongoClient对象的时候要加上connect=False参数。app.mongo = MongoClient(host='0.0.0.0',port=27017,connect=False)。