質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

3196閲覧

setlocale()を使ってロケール設定の変更をしたいのだが、locale.Error: unsupported locale setting が発生する

FUJIW

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/08/03 09:23

編集2019/08/03 10:51

前提・実現したいこと

O'reillyの『入門python3』でpython勉強中です。
setlocale()を使ってロケールを変更し月名と日、曜日をアメリカ英語やフランス語で表示するコードを試したのですが、エラーが発生してしまいました。
しかし、エラーが発生した後にもう一度同じコードを入力すると今度はうまくいきます。
原因がわからないので、教えていただきたいです。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\USER\Anaconda3\lib\locale.py", line 604, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting

該当のソースコード

python

1locale.setlocale(locale.LC_TIME, 'en_us')

試したこと

上述した通り、同じコードをエラーがでたあとに再度入力すると今度はうまくいき('en_us'と表示され)、ロケール設定をアメリカ英語に変更することができます。
この変更の後、例えば'en_us'を'fr_fr'に代えたコードを入力すると同じエラーが出ますが、この時も同じコードを再度入力するとエラーが発生せずロケール設定の変更が可能です。

回答を受けていろいろ試してみました

  • 'en_us'→'en_UN'(国名を大文字に変更)番号リスト

小文字の時と同じように、一度はエラーが出ますが、再度入力すると通ります。
また、locale.setlocale(locale.LC_TIME, 'en_US')が通ったあとに、'en_US'を'en_us'に代えたコードを入力すると今度はエラーが発生しました。

python

1locale.setlocale(locale.LC_TIME, 'en_US') 2#一回目はエラーが発生 3locale.setlocale(locale.LC_TIME, 'en_US') 4#再度入力すると今度は'en_US'と返され、うまくいきます 5locale.setlocale(lcale.LC_TIME, 'en_us') 6#さらに国名小文字コードを入力するとまたエラーが発生します
  • 'en_us'→'適当な文字列'

エラーが発生し、再度入力しても通ることはありませんでした。

補足情報(FW/ツールのバージョンなど)

windows 10 home, python3.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

言語と国名を組み合わせたロケール名では、言語は小文字、国名は大文字です。
en_US

en_usで2度目に通るというのはちょっと分かりません。

投稿2019/08/03 10:27

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FUJIW

2019/08/03 10:33

回答ありがとうございます。 国名を大文字にしてみましたが、同じエラーが発生し、再度試してみるとうまくいきます。
otn

2019/08/03 10:59

Windowsだと、 ・下線でなくハイフンで繋ぐ ・大文字小文字無視 と、独自仕様のようですね。
FUJIW

2019/08/03 11:24

下線をアンダーバーにするとエラーすることなく実行できました! windowsの独自仕様なのですね。下線の場合もなぜか二度目で通るという謎はありますが、これで学習を次に進められそうです。 ありがとうございました。
otn

2019/08/03 12:08

「再度入力すると」ということは、プログラムをファイルに書いているのじゃ無くて、何らかの対話環境でしょうか? ファイルに書いて実行するとどうなりますか?
FUJIW

2019/08/03 12:33 編集

対話型インタープリタ(アナコンダプロンプト)に入力していました。 ファイル(loca.pyとしました)に import locale locale.setlocale(locale.LC_TIME, 'en_us') と書いて保存し、プロンプトで >python loca.py と実行するとlocale.Errorが発生しました。この場合は二度目以降も同じエラーが発生します。 一方で、pythonを呼び出して >>> import loca と入力した場合は、一度目はlocale.Errorになりましたが、二度目以降はインポートができました。
otn

2019/08/03 12:34

Anaconda固有の問題じゃないでしょうか? あと、ファイルで実行するときは、Windowsはハイフン区切りのようなので、'en-US' にしてください。
FUJIW

2019/08/03 13:21

なるほど。 下線をハイフンにかえるとエラーが出ることなく実行できました。 ありがとうございました。
otn

2019/08/03 13:27

Anacondaとか、IDEとかで実行して「何かおかしい」と思った場合は、普通にファイルに書いて実行させて比べると、原因の切り分けが出来ますので、今後そうしてください。
FUJIW

2019/08/04 05:30

次から試してみます。 丁寧に教えていただきありがとうございました。
guest

0

投稿2019/08/03 10:10

meg_

総合スコア10577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FUJIW

2019/08/03 10:25

回答ありがとうございます。 locale.setlocale(locale.LC_TIME, 'en-US') 試してみましたが、やはり一度locale.Errorが発生し、再度同じコードを入力すると今度はうまくいきます。 ちなみに windows 10 home, Python3.7 です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問