注目キーワード

【Python】文字列が数値型(int・float)へ変換可能か判定する方法

文字列を数値に変換する方法として「int関数」と「float関数」がありますが、不正な値を渡すとエラーになってしまいます。

これを回避するために対象の型に変換が可能か判定する方法が必要です。

この記事では文字列を「int型」へ変換する方法と「float型」に変換する方法についてサンプルソースを使いながら説明していきたいと思います。

対象レベル

Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。

詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。

サンプルソースを読むうえで理解しておきたいこと

基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。

int型に変換可能か判定する方法

まず、整数型(int)に変換する方法について説明していきたいと思います。

文字列が整数に変換可能かを調べる方法として「 isdecimal() 」を使います。

使い方は簡単で文字列の後ろに「 isdecimal() 」を付けます。

「 isdecimal() 」 は戻り値に「bool型」(True、False)を返します。

 文字列.isdecimal()

早速、サンプルソースを作ってみました。

こちらのプログラムはコマンドライン引数を受け取り数値変換が可能であれば、「True」を返すので「 数値変換可能です。 」というメッセージが出力されます。

また、それ以外では、「 数値変換不可です。 」と出力されます。

整数を指定した場合

それでは、実際に動かしてみましょう。

引数に「10」を渡して起動してみます。

この場合は整数なので「 数値変換可能です。」というメッセージが出力されます。

sample_type_judge_1.pyの実行結果➀

文字列を指定した場合

引数に「a」を渡した場合は文字列ですので、判定結果は「False」になり、「数値変換不能です。」と出力されます。

sample_type_judge_1.pyの実行結果②

浮動小数点数を指定した場合

浮動小数点数「1.5」を指定した場合はどうなるでしょうか?

「 isdecimal() 」は整数のみ有効ですので、intに変換が不可能と判定され「数値変換不能です。」と出力されます。

sample_type_judge_1.pyの実行結果③

float型に変換可能か判定する方法

isfloat()は存在するのか?

「 isdecimal() 」同様に浮動小数点数を判定する「isfloat()」は存在するのか調べてみましたがどうやら存在しないようです。

しかし、複数の関数を組み合わせることによって「isfloat()」を作ることが出来ます。

float関数を使ってみる

少し話がそれますが、「float関数」という関数があります。この関数は文字列を浮動小数点数に変換する関数です。

以下の実行結果は正常系で浮動小数点数「1.5」の文字列を渡したので正常に型変換が行われました。

スポンサーリンク

sample_type_judge_2_error.pyの実行結果➀

次にこのプログラムに文字列「a」を渡してみます。そうすると型変換が出来ないので「ValueError」が発生します。

ValueError: could not convert string to float: 'a'
sample_type_judge_2_error.pyの実行結果②

isdecimal() と float関数 を組み合わせると判定が可能

見出しの通り以下のプログラムは「 isdecimal() 」と「float関数」を使って「文字列」、「整数」、「浮動小数点数」の3種類に分類してくれるプログラムです。

はじめに整数の判定を行い、「True」だったら整数と判定します。

それ以外は、「 文字列 」か「 浮動小数点数 」なのでこのタイミングで「float関数」を使って浮動小数点数に変換します。問題なく、浮動小数点数に変換できれば「浮動小数点数」と判定して良いわけで、エラーが発生したら文字列になるわけです。

sample_type_judge_2.pyの実行結果

isfloatを作ってみる

最後に「isfloat関数」を作ってみましょう。

先ほどのサンプルソースの判定ロジックを関数として切り出して、戻り値を「bool型」(True、False)にしてあげればOKです。

「15」、「1.5」、「a」をコマンドライン引数として実行してみた結果も問題なさそうです。

sample_type_judge_3.pyの実行結果

まとめ

整数への変換は「isdecimal」を使う、使い方は「文字列.isdecimal()」

「isfloat」は存在しない、 「isdecimal」 と「float関数」を組み合わせれば作成可能