J'obtiens l'erreur suivante :
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
Traceback (most recent call last):
...
locale.Error: unsupported locale setting
La configuration est un système Fedora 34 nouvellement installé et mis à jour avec Python 3.9.6. L'erreur se produit lors de l'exécution de Lutris, ainsi que lors de la saisie des commandes dans IDLE. Voici la trace exacte de 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
Étant donné que, selon la documentation Python, " Une chaîne vide spécifie les paramètres par défaut de l'utilisateur ", j'ai pensé que mes paramètres régionaux par défaut ( en_AU.UTF-8
) n'étaient peut-être pas pris en charge à un certain niveau de la pile. Mais les suivants fonctionnent tous bien:
>>> 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'
Et curieusement, l'erreur ne se produit pas lorsque je cours python
dans un terminal et que j'y tape les commandes !
>>> 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'
Je n'ai donc aucune idée de ce que Python pense que les paramètres régionaux sont définis lorsque j'exécute IDLE ou Lutris à partir du bureau, mais ce n'est évidemment pas le même que celui défini lorsque j'utilise le terminal. Comment puis-je déboguer cette erreur ?
(Incidemment, l'exécution de Lutris à partir de la ligne de commande a été une solution de contournement réussie.)
Solution du problème
Le problème est la variable d'environnement LC_TIME
. Apparemment, je l'ai réglé sur en_150.UTF-8
le bureau, mais sur C.UTF-8
le terminal.
Le commentaire de Cimbali m'a mis sur la bonne voie. J'ai regardé les variables d'environnement en utilisantos.environ
de, dans IDLE-started-from-the-desktop et Python-started-from-the-terminal.
Ceux qui semblaient liés aux paramètres régionaux étaient LANG
, LANGUAGE
et LC_TIME
. Les deux premiers étaient les mêmes entre les deux cas, mais le dernier différait.
Et cela a fait disparaître l'erreur:
>>> os.environ['LC_TIME'] = 'C.UTF-8'
>>> locale.setlocale(locale.LC_ALL, '')
Ce qui me laisse juste me demander, qu'est-ce que c'est en_150
? Est-ce parce que mon bureau est réglé sur 24 heures plutôt que sur la valeur par défaut ? (Je me demande également si un rapport de bogue/demande de messages d'erreur plus descriptifs serait utile pour Python.)
Aucun commentaire:
Enregistrer un commentaire