web-dev-qa-db-ja.com

変数が整数か文字列かどうかを確認する方法は?

いくつかのコマンドがあるアプリケーションがあります。特定のコマンドを入力するとき、何か/誰かに関する追加情報を入力する必要があります。情報は、状況に応じて厳密に整数または文字列にする必要があります。

ただし、raw_input()を使用してPythonに入力するものはすべて、実際には文字列です。具体的には、変数が数字で構成されているか、キャラクター?

33
user2154354

私の意見では、2つのオプションがあります:

  • それをintに変換しようとしますが、例外をキャッチします。

    try:
        value = int(value)
    except ValueError:
        pass  # it was a string, not an int.
    

    これがAsk Forgivenessアプローチです。

  • 文字列に数字のみがあるかどうかを明示的にテストします。

    value.isdigit()
    

    str.isdigit() は、文字列のすべての文字が数字(0-9)の場合にのみTrueを返します。

    unicode/Python 3 str型の同等物は unicode.isdecimal() / str.isdecimal() ;すべての数字が実際の整数値を持つわけではないため、整数に変換できるのはUnicode 10進数のみです( + 00B2 SUPERSCRIPT 2 は数字ですが、10進数ではありません)。

    これは、「許可を求める」アプローチ、または「飛ぶ前に見る」と呼ばれることがよくあります。

空白と+および-int()値で許可されるため、後者はすべての有効なint()値を検出しません。最初の形式は' +10 'を数値として受け入れますが、後者は受け入れません。

ユーザーが通常整数を入力すると予想される場合は、最初の形式を使用します。その場合、許可を求めるよりも許しを求める方が簡単です(そしてより速く)。

67
Martijn Pieters

それが何であるかを確認したい場合:

>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False

raw_inputからintを取得する場合

>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
   except: pass

>>>isinstance(x,int)
True
19
TehTris

isdigit typeの-[strメソッド は、指定された文字列が1桁以上の場合に限りTrueを返します。そうでない場合は、文字列を単なる文字列として扱う必要があることがわかります。

7
jwodder

の定義に応じて、次のオプションのいずれかを使用できます。

2
Alexei Sholik

チェックしないでください。先に進み、それが正しい入力であると仮定し、そうでない場合は例外をキャッチします。

intresult = None
while intresult is None:
    input = raw_input()
    try: intresult = int(input)
    except ValueError: pass
1
Marcin