Pythonは静的な型チェック(コンパイル時の型チェック)をサポートしていないので、もしPythonの変数やオブジェクトが文字列かどうかをチェックしたい場合は、ある方法を使う必要があります。
ここでは、文字列型のオブジェクトをチェックする方法について説明します。
1. isinstance() メソッドの使用法
isinstance(object, type) メソッドは、 object が type に属するかどうかを調べ、その条件が成立すれば True を、そうでなければ False を返します。
一般的な型は int, str, list, object, などです。
str型をチェックしたいので、isinstance(object, str)を使って、それがTrue` であるかどうかをチェックすることにします。
例題を通して、このことを理解しましょう。
a = 123
b = 'Hello'
print('Is a an instance of str?', isinstance(a, str))
print('Is b an instance of str?', isinstance(b, str))
|
結果は以下の通りです。
Is a an instance of str? False
Is b an instance of str? True
|
2. type(object) メソッドの使用
これは isinstance() メソッドと似ていますが、明示的にオブジェクトの型を返します。
これを用いて、返された型が str であるかどうかを調べてみましょう。
例えば、以下の様になります。
a = 123
b = 'Hello'
print('type(a) =', type(a))
print('type(b) =', type(b))
print('Is a of type string?', type(a) == str)
print('Is b of type string?', type(b) == str)
|
結果は以下の通りです。
type(a) = <class 'int'>
type(b) = <class 'str'>
Is a of type string? False
Is b of type string? True
|
Functionのパラメータが文字列かどうか確認する
上記の方法のいずれかを適用して、関数に「チェック」条件を導入することができます。
これにより、入力が文字列である場合にのみ関数本体が実行されるようになります。
簡単な例を使って、この方法を理解しましょう。
a = 123
b = 'Hello'
def capitalize_name(inp):
# We can also use "if isinstance(inp, str)"
if type(inp) != str:
print('Input must be a string')
else:
print(inp.upper())
capitalize_name(a)capitalize_name(b) |
結果は以下の通りです。
Input must be a string
HELLO |
この関数は、本体に進む前にパラメータが文字列かどうかを明示的にチェックします。
このような型チェックを行うことで、Pythonの動的型チェックによる不要な実行時エラーを回避できる可能性があります。
私たちはこの関数から何のエラーも投げていません。
しかし、実際のプログラミングでは、このような関数パラメータの型検証のほとんどは TypeError 例外を投げます。
まとめ
今回は、Pythonの isinstance(), type() メソッドを使って、入力が文字列かどうかをチェックする方法について学びました。
また、これを関数に適用して、パラメータが文字列である場合のみ受け取るようにしました。
これで、実行時に発生するエラーはかなり少なくなる可能性があり、この形式は良いPythonプログラムにはとても必要なものです。
この記事がお役に立ったことを願っています。