pythonコード プログラミング系 python データサイエンス 非エンジニア向け

【Python Coding】コードチェックを効率的にするassertの使い方

こんにちは、TAKです。
今回は、pythonのコーディングで使えるassert文について紹介していきたいと思います。

「assertって何?」と思われてこの記事を見ている方がほとんどだと思うので、この記事ではassertの意味と使い方を中心に解説していきます。

【こんな人に読んで欲しい記事です】

● pythonの「assert」について知りたい方

● assert文が使える場面や活用方法を知りたい方

先に結論を言ってしまうと、assertは「pythonコードのデバックやテストをしたい時」「エラー発生時にメッセージを出力させたい時」に使える機能です。

エラー管理の必要性やエラー発生の可能性がない方であれば、assert文を知っておく必要はありませんが、誰だってエラー出ることありますよね。

よりpythonのレベルが高くなり、pythonコードが複雑になるにつれて、エラーや検証の回数は増えていくはずですので、今のうちに使い方をマスターしておきましょう。

難しくないです。

assertの役割は「コードチェック」

すでに説明しましたが、assertはpythonのコードをチェックするための機能です。
そのため、数値を集計したりデータを加工するようなことは(当然)出来ません。

pythonを使ったプロダクトを開発するような場合には、「こういうデータを与えたらどうなるか?」をチェックしたいニーズがあります。また、想定外のデータを(関数などで)受け取った場合にもエラー理由を出力させたいニーズがあるので、そのような時に使われると認識してもらえればOKです。

プロダクトの開発とまではいかなくても、個人で大量のコードを書いているような場合、ポイントでassert文を書いておくことで、エラー発生時にその理由を把握し、より効率的にコードを修正することが可能となります。

必要ライブラリのインポート

今回使うライブラリのインポート

まず最初に、今回使うライブラリをインポートしておきます。
assert機能は標準ライブラリで使えるので特に準備はいりませんが、今回numpyを用いた配列をデータとして作成していくのでインポートしてあります。

エラーがない場合|assertなし

では実際にデータを作成してassertの使い方をみていきましょう。
その前に、まずは特にエラーがない場合(assertなし)のコードをみて、その後にエラーがある場合(assertあり)のコードを見ていきたいと思います。

データとしては、numpyを用いた「100行3列の乱数」を用います。
そして、「各行ごとに平均値が知りたい」と仮定し、その平均値を返す関数を作成します。

イメージしやすいように、AIモデルのパラメータ値の平均を求めたいと考えてみてください。
何かを予測するために、このAIモデルは3つの特徴量を持っているといった感じです。
(AIとの関連性が今一つわからない方は、単純に数値を横方向に足して平均していくと思ってください。)

「100行3列」のデータをnumpyで作成|上記は10行分のみ表示
各行ごとに平均を返す関数
先ほど作ったデータ(ary1)を渡した結果|上記は10行分のみ表示

上記のように、各行ごとに値の平均を算出することが出来ました。

では、モデルを構築するにあたり、特徴量(カラム)の数を必ず「3つ」にしたいようなケースで、想定外のデータを受け取った場合にはどうすればいいでしょうか?

こんな時こそ「assert」が使えます。

エラーがある場合|assertあり

ではまず、関数に渡すデータを少し変えておきましょう。
「100行4列」のデータを用意します。

「100行4列」のデータをnumpyで作成|上記は10行分のみ表示

そして、先ほどの関数にassertを追加したコードが以下となります。

各行ごとに平均を返す関数 に「assert」を追加

「assert」の使い方ですが、「assert+条件式(+エラー時メッセージ)」だけでOKです。
条件式に一致すれば問題なくコードが進みますが、条件式に合わない場合には設定したエラーメッセージが表示されることになります。

試しに先ほど作成した関数にデータを渡してみます。

作成データ(ary2)を関数(assert有)に渡した結果

すると、渡したデータの特徴量(カラム)数が「3つ」でないため、エラーとなります。
assert文を設定した時に「エラー時メッセージ」を指定しないと、上記のように空白メッセージが出力されます。

assertに「エラー時メッセージ」を設定した関数

assert文にエラーメッセージを追加して、エラー内容を把握しやすいようにしてみます。

先ほどと同じデータを渡してみます。

エラーメッセージ設定したassert文にary2を渡した結果

すると、赤枠のようにエラーメッセージが表示されてよりわかりやすくなりましたね。

以上が、assertの具体的な使い方となります。

さいごに

今回は、pythonの「assert」について概要と使い方を中心に紹介してきました。

テスト時やコードチェック時にassert文を挿入して、効率的なコーディングが出来るようにしてみてください。

またね~