変数が整数であるかどうかの確認

変数が整数であるかどうかを確認するにはどうすればよいですか?

ソリューション

必要な場合は、次のようにします。

isinstance(, int)

ただし、Python 2.x を使用している場合には

isinstance(, (int, long))

typeを使ってはいけません。これはポリモーフィズムの柔軟性をすべて遮断してしまうので、Pythonではほとんど正解ではありません。例えば、intをサブクラス化した場合、新しいクラスはintとして登録されなければなりませんが、type` ではそれができません。

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

これは Python の強力なポリモーフィズムに準拠しています: int であることを強制するのではなく、int のように振る舞う任意のオブジェクトを許可するべきです。

BUT

しかし、古典的なPythonの考え方では、許可するよりも許してもらう方が簡単です。言い換えれば、x が整数であるかどうかをチェックするのではなく、整数であると仮定し、そうでない場合は例外の結果をキャッチします。

try:
    x += 1
except TypeError:
    ...

これは、特別に構築されたクラスを継承させることで、オブジェクトが持つべきプロパティ(加算、乗算、倍加など)を正確に登録できるものです。これは、必要かつ十分な属性を持つオブジェクトを正確に*許可するので、最良の解決策となりますが、使い方についてはドキュメントを読まなければなりません。

解説 (14)
>>> isinstance(3, int)
True

詳細はこちらをご覧ください。

これは int のような属性を探している場合には役に立たないことに注意してください。この場合、longもチェックしたほうがいいでしょう。

>>> isinstance(3L, (long, int))
True

Pythonのソースでは、配列/インデックス型に対するこの種のチェックを見たことがありますが、C言語以外では見られないと思います。

Token SO reply: 本当に型をチェックする必要があるのでしょうか?処理できない型を渡さないようにするか、潜在的なコード再利用者を出し抜こうとしないようにしましょう。

解説 (8)

関連質問](https://stackoverflow.com/questions/402504/how-to-determine-the-variable-type-in-python)をSO自体で見つけました

Pythonの開発者は、型をチェックせずに、型固有の操作を行い、TypeErrorという例外をキャッチすることを好みます。しかし、型がわからない場合は以下のようになります。

>>> i = 12345
>>> type(i)

>>> type(i) is int
True
解説 (3)