Python中級者への道-Effective Python備忘録_04

python Python
python
スポンサーリンク

どうもです。バオウです。

<<<本ブログの目的>>>

Effective Pythonという良書があります。

Python入門を脱却して、そろそろ中級者

になりたいなーって人向けの書籍です。

この連載ではEffective Pythonの中身を

解説していきます。

ソースは全てGitHubに掲載していますので

ご自由に閲覧いただければと思います。

詳細は第0回をご覧ください。

 

それでは早速参りましょう。

 

項目14:Noneを返すよりは例外を選ぶ

ソースはこちら

ソース内に解説を書いてますので、ご覧ください。

内容をかいつまんで説明します。

 

項目14で筆者が言いたい事を端的に言いますと、

“Noneを返す事で特別な意味を示す関数は、Noneだけでなく、他の値例えばゼロ, 空文字列等においても条件式にかけると’False’と判定される為、エラーを引き起こしやすい。なのでNoneを返すのではなく例外を上げて特別な処理を示す方が良いよ。”

と言う事です。

 

Noneを返す事が自然だと思う例

例えばある数aを別の数bで割る関数について考えてみます。

特別な場合として、a=5, b=0などの組み合わせについて考えると

ゼロで割る→結果が未定義→Noneで返すことが自然に思えますので

以下の関数が記述できます。

Noneを返す事に特別違和感は感じません。

起こり得るエラーについて

筆者は上記のコードはエラーを起こしかねないと指摘しています。

それは、返り値がNoneに注目している間は起こりえないエラーです。

何を言っているのかというと、返り値がNoneである事に注目せずに

True/Falseのブーリアン型である事に注目した場合にそのエラーが

生じます。

 

Noneを返す事でエラーが起きかねない

上記の例から少し極端ではありますが、そもそもNoneを

返しているからエラーが起きるのだという事が推測されます。

そこでエラーを返さない処理が望まれます。

Noneを返さない。例外処理する

Noneを返さない代わりに例外を呼び出し、その処理を呼び出し元に

実施させよう、というのが項目14での主張です。

先程のヘルパー関数をこの思想に則って書き換えてみましょう。

 

呼び出し元にも協力を仰ぐ

上記例では例外としてValueErrorを生じさせる事が

わかります。しかし、例外処理が生じることそのもの

が記述されていない場合は、呼び出し元で、どのように

ハンドリングして良いかが分からなくなります。

ですので関数やモジュール、クラスに関しては必ず

__doc__属性を記入する事を忘れないでください。

 

結論

  • Noneを返す事でいとしない処理をされる場合がある。
  • Noneを返すなら例外を返すべき。
  • 安全な処理を完結させる為には呼び出し元にも協力を仰ぐべき。
  • __doc__属性には必ず必要事項を記入する事。

 

以上!

Python
スポンサーリンク
バオウをフォローする
マイナーなマイナー(Minor&Minner)

コメント

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