投稿日:
2019年1月14日
最終更新日:
【Python3】os.environで取得した環境変数の文字列型(str)の値を数値方(int)に変更するやり方【キャスト方法】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
目次
文字列で取れてしまう
お手軽に環境変数を扱える
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が活躍出来る場が増えてきているので、覚えておくと良いでしょう♪