ねこじゃすり
猫を魅了する魔法の装備品!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
スポンサーリンク
目次
文字列で取れてしまう
お手軽に環境変数を扱える
Pythonを使ってAWSのLambda関数やツールを作成していると、環境変数に設定した値を取得して利用したいというケースが少なからず発生すると思います。
Python3での環境変数の値の取り方は以下のようにとても簡単です。
試しにPYTHONPATHと言う環境変数を取得してみます。
1 2 3 4 |
import os env_var = os.environ.get('PYTHONPATH') print(env_var) |
1 |
/Users/blogenist/.pyenv/shims/python |
存在しない環境変数を指定した場合はNone
が取得されます。
数値はそのままは使えない
ただ、数値を環境変数にもたせている場合はそのまま使おうとすると以下のようになってしまいます。
1 |
export LOOP_COUNT=5 |
1 2 3 4 5 |
import os env_var = os.environ.get('LOOP_COUNT') for index in range(env_var): print(index) |
1 2 3 4 5 |
Traceback (most recent call last): File "sample.py", line 4, in <module> for index in range(env_var): TypeError: 'str' object cannot be interpreted as an integer ✘ |
これは、os.environで取得した値がint型ではなくstr型で取得されるPythonの仕様のため、そのままではrange関数の引数に使えない、と言う現象になります。
ですので、int型にキャストする必要があるのですが、Python3では簡単にキャストをすることが出来るのでご紹介致します。
手順
int関数を利用
Pythonには文字列を数値に変換するintメソッドが用意されています。
これを利用することで簡単に文字列数字を数値に直すことができます。
1 2 3 4 5 6 7 8 9 10 |
import os env_var = os.environ.get('LOOP_COUNT') print(f"env_var:{env_var}") int_val = int(env_var) print(f"int_val:{int_val}") for index in range(int_val): print(index) |
1 2 3 4 5 6 7 |
env_var:5 int_val:5 0 1 2 3 4 |
標準出力上は変わりませんが、しっかりとrange関数に渡せるようになりましたね♪
半角文字列数値以外をint関数に渡すとどうなる?
では、実装ミス等が原因でint関数に文字列数字以外を渡してみましょう。
アルファベットの場合
まずはアルファベットの場合です。
1 2 3 4 5 6 7 |
import os env_var = "A" print(f"env_var:{env_var}") int_val = int(env_var) print(f"int_val:{int_val}") |
1 2 3 4 5 6 |
env_var:A Traceback (most recent call last): File "sample.py", line 5, in <module> int_val = int(env_var) ValueError: invalid literal for int() with base 10: 'A' ✘ |
予想通りエラーが出ましたね。
全角数値の場合
では、次は全角数値の場合です。
1 2 3 4 5 6 7 8 9 10 11 |
import os env_var = "1" print(f"env_var:{env_var}") # 比較用半角数字 exa_var = "1" print(f"exa_var:{exa_var}") int_val = int(env_var) print(f"int_val:{int_val}") |
1 2 3 |
env_var:1 exa_var:1 int_val:1 |
なんと動いてしまいました・・・・!
これは予想外でしたね。
あまり使うケースはないとは思いますが、このケースは念頭に入れておいた方が良いかもしれませんね。
終わりに
以上のように、知っておかないとバグが発生してしまいます。
近年はサーバーレスアーキテクチャや人工知能などでPythonが活躍出来る場が増えてきているので、覚えておくと良いでしょう♪