Python 逆引き集 | Python基礎・実行環境:変数の型を確認する

Python Python
スポンサーリンク
スポンサーリンク

Python基礎・実行環境と「型を確認する」という発想

Pythonは「動的型付け」の言語ですので、変数に値を代入するときに型を宣言する必要はありません。 その一方で、「この変数は今、何の型になっているのか」を意識しないと、思わぬバグやセキュリティ上の問題につながることがあります。 そこで重要になるのが、変数の型を確認するという習慣です。

ここでは、初心者向けに「なぜ型を確認するのか」「どうやって確認するのか」「どんな場面で役立つのか」を、例題やテンプレートを交えながら丁寧に説明していきます。

なぜ変数の型を確認する必要があるのか

Pythonは「型を勝手に決めてくれる」からこそ危険でもある

Pythonでは、次のように書くだけで変数が定義されます。

x = 10          # 整数(int)
x = 3.14        # 浮動小数点数(float)
x = "hello"     # 文字列(str)
x = True        # 真偽値(bool)
Python

この柔軟さはとても便利ですが、次のような問題も生みます。

  • ある処理では数値を想定していたのに、文字列が入ってしまう
  • リストだと思っていたものが、実はタプルだった
  • None が紛れ込んでいて、メソッド呼び出しでエラーになる

こうしたトラブルを早めに見つけるために、「型を確認する」というテクニックが役立ちます。

型を確認する基本:type() 関数

type() の基本的な使い方

Pythonには、変数の型を返してくれる組み込み関数 type() があります。

x = 10
print(type(x))   # <class 'int'>

y = "hello"
print(type(y))   # <class 'str'>
Python
  • type(x) は「xがどのクラス(型)のインスタンスか」を返します。
  • 出力は <class 'int'><class 'str'> のような形になります。

よく使う基本型の例

a = 10
b = 3.14
c = "Python"
d = True
e = [1, 2, 3]
f = {"name": "Taro", "age": 20}

print(type(a))  # <class 'int'>
print(type(b))  # <class 'float'>
print(type(c))  # <class 'str'>
print(type(d))  # <class 'bool'>
print(type(e))  # <class 'list'>
print(type(f))  # <class 'dict'>
Python

このように、type() を使うと「今この変数は何者なのか」を一瞬で確認できます。

実務でよく使う「型確認」の場面

ユーザー入力が本当に数値か確認したいとき

input() は必ず文字列を返します。

value = input("数字を入力してください: ")
print(type(value))  # <class 'str'>
Python

そのまま計算に使うとエラーになりますので、int()float() で変換する必要があります。

value = input("数字を入力してください: ")
num = int(value)  # 数値に変換
print(type(num))  # <class 'int'>
Python

このとき、type() を使って「ちゃんと数値になっているか」を確認すると安心です。

APIや外部ライブラリからの戻り値を確認したいとき

外部ライブラリやAPIの戻り値は、ドキュメント通りとは限らないことがあります。

response = get_data_from_api()
print(type(response))
Python
  • 期待しているのが dict なのか list なのか
  • 場合によっては None の可能性があるのか

を確認することで、エラーやセキュリティ上の問題を早めに察知できます。

型によって処理を分ける:isinstance() の使い方

type() と isinstance() の違い

type() は「正確な型」を返しますが、継承関係を考慮しません。 一方、isinstance() は「ある型、またはそのサブクラスかどうか」を判定します。

x = 10

print(type(x) == int)        # True
print(isinstance(x, int))    # True
Python

isinstance() の基本例

value = 10

if isinstance(value, int):
    print("value は整数です")
elif isinstance(value, float):
    print("value は小数です")
else:
    print("value は数値ではありません")
Python

このように、isinstance() を使うと「型によって処理を分ける」ことができます。

型確認を使った安全なコードの書き方(セキュリティ視点)

危険な例:型を信じすぎる

def process_amount(amount):
    return amount * 100  # amount が文字列だとエラー
Python

外部から渡される amount が必ず数値だと信じていると、予期せぬ入力でエラーや不正な動作につながります。

安全な例:型を確認してから処理する

def process_amount(amount):
    if not isinstance(amount, (int, float)):
        raise TypeError("amount は数値である必要があります")
    return amount * 100
Python
  • 型を確認してから処理することで、想定外の入力を早めに弾けます。
  • セキュリティ上も、「変な型の値が紛れ込んだときにどうするか」を明確にできます。

対話モードで型確認を練習するテンプレート

ステップ1:対話モードを起動する

# Windows
python

# macOS / Linux
python3

>>> が表示されたら準備完了です。

ステップ2:いろいろな値の型を確認する

>>> x = 10
>>> type(x)
<class 'int'>

>>> y = 3.14
>>> type(y)
<class 'float'>

>>> s = "hello"
>>> type(s)
<class 'str'>

>>> lst = [1, 2, 3]
>>> type(lst)
<class 'list'>

ステップ3:isinstance() を試す

>>> x = 10
>>> isinstance(x, int)
True
>>> isinstance(x, float)
False
>>> isinstance(x, (int, float))
True

このように、対話モードは「型の感覚」を身につけるのに最適な練習場になります。

型確認のパターン集(そのまま使えるテンプレート)

デバッグ用ログに型を出す

value = get_value()
print(f"value={value}, type={type(value)}")
Python

関数の入り口で型チェックする

def send_email(to, subject, body):
    if not isinstance(to, str):
        raise TypeError("to は文字列である必要があります")
    if not isinstance(subject, str):
        raise TypeError("subject は文字列である必要があります")
    if not isinstance(body, str):
        raise TypeError("body は文字列である必要があります")
    ...
Python

ユーザー入力を安全に扱う

raw = input("年齢を入力してください: ")

try:
    age = int(raw)
except ValueError:
    print("数字を入力してください")
else:
    print(f"あなたの年齢は {age} 歳ですね")
Python

ここでは type() を直接使っていませんが、「型を意識して扱う」という発想が同じ根っこにあります。

まとめ

  • Pythonは動的型付けなので、変数の型は代入された値によって自動で決まります。
  • type() を使うと、変数が今どの型なのかを簡単に確認できます。
  • isinstance() を使うと、「ある型かどうか」を判定して処理を分けることができます。
  • 型確認は、バグの早期発見だけでなく、セキュリティ上の安全性を高めるうえでも重要です。

初心者のうちは、「わからなくなったら type() で確認する」「外から来る値は isinstance() でチェックする」という2つの習慣を持つだけで、Pythonコードの安定感がぐっと増していきます。

タイトルとURLをコピーしました