AttributeError:“module”对象没有属性“setdefaultencoding”

2024-05-16 01:13:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试安装xadmin(它是django的插件,用于backoffice和twitter的引导)。但是当我运行我的项目时,我的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'

这是从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")

该项目使用Python3.4解释器和Django1.7.1运行。xadmin的版本是0.5.0

我能做什么?


Tags: 项目djangofrompyimport插件cachesys
3条回答

您不需要对已经在Python 3中编码的数据进行编码。当您尝试这样做时,Python将首先尝试将其解码为Unicode,然后再将其编码回UTF-8。 您可以从代码中删除或注释此语句

sys.setdefaultencoding("utf-8")

显然,xadmin项目严格来说是Python-2。你可以很容易地修补那一个文件,只要把最后两行变成

if sys.version[0] == '2':
    reload(sys)
    sys.setdefaultencoding("utf-8")

把小补丁发给xadmin的维护者。不过,这不太可能是包中与Python3不兼容的仅位——毫无疑问,稍后您将遇到更深入、更微妙的位。因此,最好的方法是编写xadmin的维护人员,询问使Py 3兼容的计划是什么,以及如何帮助完成任务。

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

由于Python 3的默认值是UTF-8已经,因此没有必要将这些语句留在中。

在Python 2中,使用sys.setdefaultencoding()是用来掩盖隐式编码问题(由字节字符串和unicode值的具体化以及其他这种混合类型的情况引起的),而不是修复问题本身。Python 3取消了隐式编码和解码,因此使用plaster设置不同的编码不会有任何区别。

但是,如果这是一个第三方库,那么您可能会遇到其他问题,因为它显然与Python3不兼容。

相关问题 更多 >