一、"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? Linux 2 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测试数据/pypi/simple/ 中国科技大学?https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban)?http://pypi.douban测试数据/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常见报错 - 运维笔记的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did128010