Colaboratoryではexit()は動かない

その他

結論

Colaboratoryではexit(), quit()は期待通りに動かない。exit()と同じようなことをしたい場合は、exit()を書く代わりに例外を投げる処理を書く。

raise Exception()

背景

コードのテストする際にどこまで問題ないか確認するために、処理を中断する処理を書くことがある。Pythonの場合はexit()を呼び出していたが、Colaboratoryでは期待した動きにならなかった。具体的には、処理が継続して、最後まで実行するとランタイムが再起動するような挙動だった。

調査

調べてみると、Colaboratoryではexit()は動かないらしい。

Is there a function in google.colab module to close the runtime
Sometimes when I give run in google.colab I cant stay infront of the computer to manually disconnect from the server when the run is complete and the connection...
JupyterLabでのexit()の扱い
JupyterLab上でAtCoderのプログラムを書いています。 下記の問題を解いていた時にfor文内でexit()を使ったのですが、終了せずにそれ以降のループも実行されました。 しりとりの文字

terateilの回答にもあったが、exitは特殊な処理をしているらしい。ドキュメントにもそれっぽいことが書いてあった。

表示されたときに “Use quit() or Ctrl-D (i.e. EOF) to exit” のようなメッセージを表示し、呼び出されたときには指定された終了コードを伴って SystemExit を送出するオブジェクトです。

https://docs.python.org/ja/3/library/constants.html?highlight=exit#exit

quitについても同じような説明があり、試しにColaboratoryで実行してみると、exitと同じように処理が中断せずに、エラーが発生したっぽいメッセージが表示され、ランタイムが再起動するような動きになった。

stack overflowの回答に次を書くと良いとあったが、こっちは実行が失敗したような挙動になったのでダメそう。

!kill -9 -1

コメント