【Python】isinstanceのエラーの対処法。正しく型を指定しているのにエラーになるのはなぜか?:isinstance() arg must be a type or tuple of types

Python-prograshi(プロぐらし)-kv Python
記事内に広告が含まれていることがあります。

Pythonで指定したデータの型を確認するisinstanceメソッドで、下記エラーが出た場合の原因と対処法についてまとめています。


エラー内容と発生状況

▼エラーの内容

TypeError: isinstance() arg 2 must be a type or tuple of types

2つ目の引数が型(type)になっていないとのエラーです。


実際の処理では、以下のように正しく型(ここでは配列 list)を設定しているにも関わらず、配列ではないと表示されます。

arr = [1,2,3]

#2つ目の引数で「list」を指定している
if isinstance(arr, list):
    print ("YES")

#TypeError: isinstance() arg 2 must be a type or tuple of types


原因

原因はシンプルで、このコードより前に型名と同じlistという変数を使用していたため、list=型ではなく、list=変数になっていたことです。


対処法

この場合の対応方法は2つあります。

対処法

①型と同じ名前の変数を使わない。
②引数の指定を type(型名)とする。

基本的には①の「型と同じ名前の変数を使わない」とすべきです。


②引数の指定を type(型名)とした場合

修正が大変になる場合は、typeメソッドで、型名を指定していることを明示することで解決します。

arr = [1,2,3]

if isinstance(arr, type(list)):
    print ("YES")

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