AttributeError:'module'对象没有属性'setdefaultencoding'

Clé*_*ise 18 python django

我尝试安装xadmin(这是一个django的插件,用于使用Twitter的bootstrap后台).但是当我运行我的项目时,我的PyCharm终端出现以下错误:

File "C:\Python34\lib\site-packages\xadmin\sites.py", line 10, in <module>
sys.setdefaultencoding("utf-8")
AttributeError: 'module' object has no attribute 'setdefaultencoding'
Run Code Online (Sandbox Code Playgroud)

这是xadmin插件中sites.py的源代码摘录:

import sys
from functools import update_wrapper
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.db.models.base import ModelBase
from django.views.decorators.cache import never_cache
from imp import reload

reload(sys)
sys.setdefaultencoding("utf-8")
Run Code Online (Sandbox Code Playgroud)

该项目使用python 3.4解释器和Django 1.7.1运行.xadmin的版本是0.5.0

我能做什么 ?

Mar*_*ers 48

Python 3没有任何sys.setdefaultencoding()功能.它不能reload(sys)像Python 2那样恢复(在任何情况下你都不应该这样做).

由于Python 3上的默认值已经是UTF-8 ,因此将这些语句留在中是没有意义的.

在Python 2中,使用using sys.setdefaultencoding()来掩盖隐式编码问题(由串联字节字符串和unicode值以及其他类似的混合类型情况引起),而不是修复问题本身.Python 3取消了隐式编码和解码,因此使用石膏设置不同的编码无论如何都没有区别.

但是,如果这是第三方库,那么您可能会遇到其他问题,因为它显然没有与Python 3兼容.


Ale*_*lli 11

显然,该xadmin项目严格来说是Python-2.您可以轻松修补该文件,只需将最后两行转换为

if sys.version[0] == '2':
    reload(sys)
    sys.setdefaultencoding("utf-8")
Run Code Online (Sandbox Code Playgroud)

并将小补丁发送给维护人员xadmin.然而,这不太可能是这个包中唯一与Python 3不兼容的位 - 毫无疑问,你会在以后遇到更多,更微妙的问题.因此,最好是编写维护人员,xadmin询问是什么计划使Py 3兼容,以及如何帮助完成任务.