Python 带有空字符串的 setlocale(默认语言环境)给出 "unsupported locale setting"
Python setlocale with empty string (default locale) gives "unsupported locale setting"
我收到以下错误:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
Traceback (most recent call last):
...
locale.Error: unsupported locale setting
安装是新安装和更新的 Fedora 34 系统 Python 3.9.6。当 运行ning 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 文档,“An empty string specifies the user’s default settings”,我想也许我的默认语言环境 (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'
所以我不知道 Python 认为 当我从桌面上 运行 IDLE 或 Lutris 时设置的是什么,但显然不一样当我使用终端时一套。我该如何调试这个错误?
(顺便说一下,运行从命令行使用 Lutris 是一个成功的解决方法。)
问题是环境变量LC_TIME
。显然我在桌面上设置为 en_150.UTF-8
,但在终端上设置为 C.UTF-8
。
让我走上正轨。我在 IDLE-started-from-the-desktop 和 Python-started-from-the-terminal.
中使用 os.environ
查看了环境变量
出现locale-related的是LANG
、LANGUAGE
和LC_TIME
。两种情况前两个一样,最后一个不一样
这使错误消失了:
>>> os.environ['LC_TIME'] = 'C.UTF-8'
>>> locale.setlocale(locale.LC_ALL, '')
这让我想知道,en_150
到底是什么?是因为我的桌面设置为 24 小时制而不是默认时间吗? (还想知道更多描述性错误消息的错误 report/request 是否对 Python 有用。)
我收到以下错误:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
Traceback (most recent call last):
...
locale.Error: unsupported locale setting
安装是新安装和更新的 Fedora 34 系统 Python 3.9.6。当 运行ning 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 文档,“An empty string specifies the user’s default settings”,我想也许我的默认语言环境 (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'
所以我不知道 Python 认为 当我从桌面上 运行 IDLE 或 Lutris 时设置的是什么,但显然不一样当我使用终端时一套。我该如何调试这个错误?
(顺便说一下,运行从命令行使用 Lutris 是一个成功的解决方法。)
问题是环境变量LC_TIME
。显然我在桌面上设置为 en_150.UTF-8
,但在终端上设置为 C.UTF-8
。
os.environ
查看了环境变量
出现locale-related的是LANG
、LANGUAGE
和LC_TIME
。两种情况前两个一样,最后一个不一样
这使错误消失了:
>>> os.environ['LC_TIME'] = 'C.UTF-8'
>>> locale.setlocale(locale.LC_ALL, '')
这让我想知道,en_150
到底是什么?是因为我的桌面设置为 24 小时制而不是默认时间吗? (还想知道更多描述性错误消息的错误 report/request 是否对 Python 有用。)