python报错问题解决:'ascii' codec can't encode character
一、"ascii' codec can't encode character"
之前部署了openstack虚拟化环境,有一天在使用nova list查看虚拟机的时候,突然报错!如下:
- [root@linux-node1 src]# nova list
- ERROR (UnicodeEncodeError): 'ascii' codec can't encode character u'\uff08' in position 9: ordinal not in range(128)
python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错,python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式。查阅网上,可以在程序中修改所有涉及到编码的地方,强制编码为utf8,即添加代码encode("utf8"),这种方法并不推荐使用,因为一旦少写一个地方,将会导致大量的错误报告。
下面介绍一个一次性修改后永久生效的方法:
- 在python的lib/site-packages文件夹下新建一个sitecustomize.py
- [root@linux-node1 nova]# find / -name site-packages
- /usr/lib/python2.7/site-packages
- /usr/lib64/python2.7/site-packages
- [root@linux-node1 nova]# cd /usr/lib/python2.7/site-packages/
- [root@linux-node1 site-packages]# cat sitecustomize.py #添加如下内容,设置编码为utf8
- # encoding=utf8
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
- 此时重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。
- [root@linux-node1 nova]# python #终端进入python,即是重启python解释器!可以多次进入
- Python 2.7.5 (default, Aug 18 2016, 15:58:25)
- [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
- Type "help", "copyright", "credits" or "license" for more information.
- >>>
- 接着,再次使用nova list命令,就没有那个报错了!
- [root@linux-node1 src]# nova list
- +--------------------------------------+----------------------------+--------+-------------+-------------+--------------------+
- | ID | Name | Status | Task State | Power State | Networks |
- +--------------------------------------+----------------------------+--------+-------------+-------------+--------------------+
- | b6a4738d-7e01-4068-a09b-7008b612d126 | beta-new1(beta环境1) | ACTIVE | - | Running | flat=192.168.1.151 |
- | 9acdb28b-02c2-41bb-87c4-5f3a8fa008ab | dev-new-test1(测试环境1) | ACTIVE | - | Running | flat=192.168.1.150 |
- | 30e5ba3e-3942-4119-9ba6-7523cf865b6f | kvm-server003 | ACTIVE | - | Running | flat=192.168.1.152 |
- | a2893208-3ec9-4606-ab82-d7a870206cb9 | kvm-server004 | ACTIVE | - | Running | flat=192.168.1.153 |
- | 3483d9f1-4015-48d9-9837-b67ca82dd54d | kvm-server005 | ACTIVE | - | Running | flat=192.168.1.154 |
- +--------------------------------------+----------------------------+--------+------------+-------------+--------------------+
############################################################################
注意:上面是python7环境下的报错解决方案,如果换成python6会怎么解决呢?
- 如果是python6环境报这个错误,则/usr/lib/python2.6/site-packages下是没有这个sitecustomize.py文件的。
- 那么这个时候就要看具体的报错文件了,在该文件的代码开头处添加如下代码:
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
- 比如,在jumpserver界面里推送系统用户的时候报错:
- ERROR (UnicodeEncodeError): 'ascii' codec can't encode character u'\uff08' in position 9: ordinal not in range(128)
- 从报错界面里找出错误所在的文件是/data/jumpserver/jperm/ansible_api.py
- 则解决办法:
- [root@jumpserver01 ~]# cp /data/jumpserver/jperm/ansible_api.py /data/jumpserver/jperm/ansible_api.py.bak
- [root@jumpserver01 ~]# vim /data/jumpserver/jperm/ansible_api.py
- # -*- coding: utf-8 -*-
- import sys #也就是在该文件代码开头添加这三行内容
- reload(sys)
- sys.setdefaultencoding('utf8')
- 然后再在jumpserver界面里进行系统用户推送操作,就不会报这个错误了!
二、pip安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))
- # pip install pymysql
- WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError
- ('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x0000015CFEC01A60>: Failed to establish a new connection: [WinError 10061]
- 由于目标计算机积极拒绝,无法连接。')': /simple/pylint/
- 解决办法:添加国内pip源的url地址
- # pip install pymysql -i url
- 目前国内比较靠谱常用的几个pip源
- 阿里云 http://mirrors.aliyun.com/pypi/simple/
- 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
- 豆瓣(douban) http://pypi.douban.com/simple/
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
- 例如安装pymysql,则命令如下:
- # pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple/
python报错问题解决:'ascii' codec can't encode character的更多相关文章
- python报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 22-26: ordinal not in range(128)”问题解决
方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为: # encoding=utf8 import sys reload(sys) sys ...
- 解决python编码问题报错:'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)
这个问题很奇怪,在服务器上执行一个写数据库的python文件,正常执行,但是使用java的ssh进行调用脚本,发现就是不执行数据库的写入,然后使用了try except的方式,打印了错误信息,发现报错 ...
- 关于编码问题,报错:'gbk' codec can't encode character '\u3164' in position 0: illegal multibyte sequence
之前经常在写入文件的时候遇到这种报错, 'gbk' codec can't encode character '\u3164' in position 0: illegal multibyte seq ...
- python+selenium运行报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
使用python+selenium运行自动化脚本时,打印某一段文字出现UnicodeEncodeError: 'ascii' codec can't encode characters in posi ...
- python 编码报错问题 'ascii' codec can't encode characters 解决方法
python在安装时,默认的编码是ascii, 当程序中出现非ascii编码时,python的处理常常会报这样的错 'ascii' codec can't encode characters pyth ...
- python 格式化时间含中文报错: 'locale' codec can't encode character '\u5e74'
执行下面代码报错: UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: Illegal ...
- Python报错UnicodeDecodeError: ascii codec can t decode byte 0xe0 ...解决方法
用命令(python setup.py install)安装webpy时候总是报错 在网上搜索到的解决方法如下: 1. 这是Python 2 mimetypes的bug 2. 需要将Python2.7 ...
- python报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 0 解决方案
环境:mac+python 2.7 场景描述:在使用python修改excel内容修改表格内容为中文保存时报以下错误 此时已经设置了utf-8了 但保存时仍然报错错 此时将python中的中文使用un ...
- Python报错“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)”的解决办法
最近在用Python处理中文字符串时,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ...
- Python报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
解决办法: 在报错的页面添加代码: import sys reload(sys) sys.setdefaultencoding('utf8')
随机推荐
- Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 1:打开" ...
- Elasticsearch安装图形化界面工具Head插件
1.Head插件介绍以及下载 Head插件是Elasticsearch的图形化界面工具,通过此插件可以很方便的对数据进行增删改查等数据交互操作.在Elasticsearch5.x版本以后,head插件 ...
- Android应用启动、退出分析
http://www.jianshu.com/p/72059201b10a §AMS和应用进程 §应用启动流程 §应用退出流程 §启动.退出消息 AMS和应用进程 应用进程 <- 系统管理 &l ...
- luogu P2000 拯救世界
嘟嘟嘟 题目有点坑,要你求的多少大阵指的是召唤kkk的大阵数 * lzn的大阵数,不是相加. 看到这个限制条件,显然要用生成函数推一推. 比如第一个条件"金神石的块数必须是6的倍数" ...
- 安卓手机ADB驱动干什么的?
Adb驱动是什么意思? /div> Adb是英文Android Debug Bridge的英文缩写,是debug工具,如果不是写IT的可能也很难理解debug的意思.说的直白一点就是Adb就是手 ...
- webstorm 设置 sass自动编译问题
sass语法.使用它带来的好处,就不再这里做介绍了,主要看怎么在webstorm里配置自动编译. sass编译是需要Ruby环境的,可以到这里去下载 : https://rubyinstaller ...
- Oracle 批量生成sys_guid()
select sys_guid() from dual connect by rownum<10
- Java基础之集合篇(模块记忆、精要分析)
千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...
- Linux系统学习之字符处理
管道 管道是一种使用非常频繁的通信机制,我们可以使用管道符"|"来连接进程,由管道连接起来订单进程可以自动运行,如同有一个数据流一样,所以管道表现为输入输出重定向的一种方法,它可以 ...
- MP实战系列(一)之入门框架搭建和使用
mybatis plus官网:https://github.com/baomidou/mybatis-plus 上面有对应的实际例子,直接导入即可用. mybatis plus官方的怎么介绍,我就不在 ...