首页 > 解决方案 > 带有空字符串(默认语言环境)的 Python setlocale 给出“不支持的语言环境设置”

问题描述

我收到以下错误:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
Traceback (most recent call last):
    ...
locale.Error: unsupported locale setting

该设置是一个新安装和更新的 Fedora 34 系统,带有 Python 3.9.6。运行Lutris以及在 IDLE 中键入命令时会发生错误。这是 Lutris 的确切回溯:

lutris:33:<module>:BrokenPipeError: [Errno 32] Broken pipe

Traceback (most recent call last):
  File "/usr/bin/lutris", line 31, in <module>
    locale.setlocale(locale.LC_ALL, "")
  File "/usr/lib64/python3.9/locale.py", line 610, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/lutris", line 33, in <module>
    sys.stderr.write("Unsupported locale setting. Fix your locales\n")
BrokenPipeError: [Errno 32] Broken pipe

鉴于,根据 Python 文档,“<a href="https://docs.python.org/3/library/locale.html#locale.setlocale" rel="nofollow noreferrer">一个空字符串指定用户的默认设置,”我想也许我的默认语言环境 ( en_AU.UTF-8) 在堆栈的某个级别不受支持。但以下所有工作正常:

>>> locale.getdefaultlocale()
('en_AU', 'UTF-8')
>>> locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
'en_AU.UTF-8'
>>> locale.setlocale(locale.LC_ALL, 'en_AU.UTF-8')
'en_AU.UTF-8'

奇怪的是,当我在终端中运行并在那里输入命令时,错误不会发生!python

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'LC_CTYPE=en_AU.UTF-8;LC_NUMERIC=en_AU.UTF-8;LC_TIME=C.UTF-8;LC_COLLATE=en_AU.UTF-8;LC_MONETARY=en_AU.UTF-8;LC_MESSAGES=en_AU.UTF-8;LC_PAPER=en_AU.UTF-8;LC_NAME=en_AU.UTF-8;LC_ADDRESS=en_AU.UTF-8;LC_TELEPHONE=en_AU.UTF-8;LC_MEASUREMENT=en_AU.UTF-8;LC_IDENTIFICATION=en_AU.UTF-8'

因此,当我从桌面运行 IDLE 或 Lutris 时,我不知道 Python认为它的设置是什么,但当我使用终端时,它显然不是同一个设置。如何调试此错误?

(顺便说一句,从命令行运行 Lutris 是一种成功的解决方法。)

标签: pythonlocale

解决方案


推荐阅读