初心者が1からプログラミング(Python)を学んでみた Part12 - Jupyter Notebook問題発生🚨
少し間が開きましたが、不定期で更新してます。Python講習会での学びを連続で載せてましたが、飽きたので今日は違う話にしたいと思います。Python講習会での様子はPart9とPart10とPart11に載せてます(そしてまだ続きます)。今回の話はPython以前の話で、何も疑わず使っていて、指摘されるまで多分一生気づくことはなかったであろう話です。
私が今現在使用してるプログラミングをかくアプリはVSCode内で使えるJupyter Notebookです。コードとテキストセルを分けて使う事ができたり、コードと結果(グラフなど)を同時に表示することが可能であり、メモのような自分専用のノートのような形で使えるのが便利だと以前書きました。⏬⏬
元々ウェブブラウザ上で提供されているサービス(下参照)で、アプリをインストールしなくても使えるものです。
こちらのJupyter Notebookを違うアプリのVSCode上で使える事が判明したので使っていたのですが、これが非常に危険だと知りました。特に計算や研究結果等、一つ間違えると後々全てが狂ったりするので、Pythonでのミスは最小限に留めておきたいところです。
問題提起
下写真のように簡単なコードを二つに分け、それぞれのセルを別々に走らせたとします。
セル①では数字を提起し、セル②では提起された数字を使っての計算結果を出しています。セルを実行する場合、セルにカーソルを移動すると左上に実行マーク(⭕)が出せるので実行が可能です。例えば上のコードのセル①の中身を変えて実行せずに、セル②を実行させたとします。下の写真ではセル①の中身を変えて提起した数字(ex_number)を削除してそのまま実行せずにセル②の中身も変え実行した形です。
本来なら提起されてない新しい名前を使うと、Python上では読めずにエラーを起こして何も実行されません。しかし、今セル①から削除されこのスクリプト上にどこにも存在しない数字が前回走らせたことでJupyter Notebook上に記録されていることになり、セル②では削除前の記録を使って実行されてしまいました。セル①を走らせていなくとも、前回の実行結果がそのまま残されているのでいかにもセル①を実行したかのように見えてます。
もっと酷いものだと下写真のようになります。
上の写真では提起した数字を変更しました(🚨1つ目)。同じ名前(ex_number)を使っていますが、セル①を実行し忘れているので結果は元の35のままです(🚨2つ目)。これをそのままセル②の計算に当てはめセル②のみ実行すると、記録されたオリジナルの数字を使っての計算になるのでもはや何を計算しているのかわからなくなります(🚨3、4つ目)。
Jupyter Notebookを使わない場合と比較
比較のために同じコードをJupyter Notebookを使わずに、ファイル名を指定してから(.pyで終わる形で)ターミナル上で実行してみました。
Pythonのスクリプトは上から下まで通して走り、毎度変更箇所がアップデートされます。
上写真1枚目と2枚目を比較すると提起した数字(ex_number)が変わってるので、実行結果もまたアップデートされた違う数字になっています。こちらの形はファイルを変更した後、毎度変更箇所を保存してからターミナルで実行させましょう。下の例題では上述と同じように数字を削除してから走らせてみました。
実行結果には定められていない数字がありますとエラーになり、ターミナル上には何も出されません。問題を未然に防ぐためにJupyter NotebookはVSCode上では使わない方がいいのかもしれません。
Jupyter Notebook内での解決策
それでもJupyter Notebook を使い続けることは可能です。
Jupyter Notebookの上の方にある”Run All"のボタンを押すことでスクリプトの一番上から順を追って走らせると上から段々と下がるので毎度提起したものがアップデートされます。その他にも下写真の様な裏トリックもあります。
このやり方では”%reset”をコードの一番上に貼ることによって(%とresetの間はスペースなし)走らせる度にJupyter Notebook上の記録をリセットし、上書きさせることも可能です。上写真では、
①:”%reset”を入れる。
②:本当にリセットしてもいいかの再確認プロットが上部に出現。
③:間違いがなければ、”y”をプロットに入れてEnterボタンを押し実行。
少し手間ですが、ひと手間を加えることによって未然に問題を防ぐ必要がありそうです。
それではまた次回(不定期)。
不定期ですが、自分の習ったことを習ったまんま載せています。スキやフォローでの応援をお願いします。