Python异常处理TypeError: translation() got an unexpected keyword argument ‘codeset‘

背景

学习graphql-python安装好依赖后执行命令

python manage.py migrate
python manage.py runserver

仅接着出现下列错误,主要提示是 「TypeError: translation() got an unexpected keyword argument ‘codeset’」

ntribute_to_class
    self.remote_field.through = create_many_to_many_intermediary_model(self, cls)
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/software_1/miniconda3/envs/learnLangchain/lib/python3.11/site-packages/django/db/models/fields/related.py", line 1051, in create_many_to_many_intermediary_model
    'verbose_name': _('%(from)s-%(to)s relationship') % {
   
   'from': from_, 'to': to},
                    ~~~~~~~~
### 问题分析 在使用 Django 连接 SQL Server 数据库时,出现如下错误: ``` TypeError: translation() got an unexpected keyword argument 'codeset' ``` 此错误通常发生在 Django 的国际化(i18n)模块中,具体是 `gettext_module.translation()` 方法被调用时传入了 `codeset='utf-8'` 参数。然而,某些版本的 `gettext` 或 Python 环境并不支持 `codeset` 参数,导致类型错误。 ### 原因分析 该问题的根本原因在于 Django 的某些版本与底层 Python 运行环境的 `gettext` 模块不兼容。Django 在 `django.utils.translation.trans_real` 模块中调用 `gettext.translation()` 时,尝试传入 `codeset='utf-8'`,但某些 Python 环境(如某些 Linux 发行版或 Conda 环境)中的 `gettext` 实现并不接受该参数,从而引发异常 [^2]。 此问题与是否使用 SQL Server 数据库无直接关联,但可能在项目初始化或运行时触发,尤其是在使用非标准 Python 环境(如 Miniconda)时更常见 [^2]。 ### 解决方案 #### 方法一:修改 Django 源码(临时修复) 找到报错文件路径: ``` django/utils/translation/trans_real.py ``` 定位到调用 `gettext.translation()` 的代码段,注释或删除 `codeset='utf-8'` 参数: ```python return gettext_module.translation( domain=self.domain, localedir=localedir, languages=[self.__locale], # codeset='utf-8', # 注释此行 fallback=use_null_fallback, ) ``` > ⚠️ 此方法为临时修复,不推荐在生产环境中使用,因为修改 Django 源码可能影响后续升级和维护。 #### 方法二:使用兼容版本的 Django 升级或降级 Django 到与当前 Python 环境兼容的版本。例如,在 Python 3.11 环境中,使用 Django 4.2.x 或更高版本通常不会出现此问题。 ```bash pip install 'django>=4.2' ``` #### 方法三:使用标准 Python 环境 如果使用的是 Conda 环境,建议切换到官方 CPython 环境,因为 Conda 提供的 `gettext` 模块可能存在兼容性问题。可使用如下命令创建标准 Python 虚拟环境: ```bash python -m venv myenv source myenv/bin/activate # Linux/macOS myenv\Scripts\activate # Windows ``` 然后重新安装 Django 和 `django-pyodbc-azure`: ```bash pip install django django-pyodbc-azure ``` #### 方法四:设置环境变量禁用翻译 如果项目不依赖国际化功能,可以在启动命令前设置环境变量以跳过翻译模块: ```bash DJANGO_SETTINGS_MODULE=your_project.settings DJANGO_TRANSLATION_OVERRIDE=1 python manage.py runserver ``` ### 总结 该错误并非由 SQL Server 数据库配置直接引发,而是 Django 与 Python 环境中 `gettext` 模块之间的兼容性问题所致。通过调整 Django 版本、修改源码或更换 Python 环境,均可有效解决此问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值