Python3学习(十五):python中出现的error汇总

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:: Failed to establish a new connection: [Errno -2] Name or service not known

当我们使用python的hdfs包进行上传和下载文件的时候,总会出现如下问题
requests.packages.urllib3.exceptions.NewConnectionError:: Failed to establish a new connection: [Errno -2] Name or service not known

其实这主要是由于没有将各个集群节点的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)。

你可能感兴趣的:(Python,python)