ぷろぐら×でざいん

Pythonで文字列を数値に変換可能かチェックする

Pythonで文字列を数値に変換可能かチェックする

文字列を数値に変換

文字列を数値に変換することは日常的に行われいると思います。

> word = '12345'
> int(word)
12345

> number = 12345
> str(number)
'12345'

その文字列、数値に変換できる?

絶対に数値(int)に変換できる文字列が来るとは限りません。最近、その洗礼を受け、修正を余儀なくされました。重要な箇所だと余計に神経をすり減らしますよね。

> word = 'word'
> int(word)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'word'

文字列を数値に変換可能かチェック

try catch を使い、例外として処理する方法です。このやり方だと確実に数値に変換できる文字列だけを変換することができます。
下記のロジックだと例外が発生した場合は、変換不可printされます。

> word = 'word'
> try:
>     int(word)
>  except ValueError:
>     print '変換不可'

変換不可

正規表現でチェックする

正規表現で数値の文字列を取得するようにすることで、その文字列がString型かint型かを判断することができるロジックです。
この場合も変換不可printされます。

import re

word = 'word'
if re.match(r'^\d+?', word):
    int(word)
else:
    print '変換不可'

最後に

システムというのはそもそも人と相容れぬ存在だと言われます。人は全くと言って完璧ではありませんが、システムは人の代替となる存在であるが故に完璧を求められます。常に想定外のことが起こるであろうと想像しながら、システムを創造するには限界があります。ですので、私はバグが発生したらとりあえず、自分の想定力の低さを憎むと同時に真摯に対応策を講じる今日です。

今回は2種類の確認方法を提示しましたが、もっと良い方法があるかもしれません。そこを追究・探求するのもエンジニアの醍醐味ですね。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です