無意味な例外処理は避けよう

システム開発を行う上でよく出てくる処理として、例外処理がある。例外処理では、プログラム実行中に例外が発生した場合にどのような処理をさせるかというのを記述する。例外処理を行っていない場合、GUI側で意味の分からないエラー文が出たり、最悪システムが落ちたりすることもありうる。このような点で、重要な処理となる。

しかし、例外処理の書き方によっては、むしろ開発の妨げになる可能性が出てくる。意味のない例外処理の例は恐らく複数あると思われるが、実際に自分が開発をしている中で、明らかに無意味だと感じた例外処理について以下で紹介する。

意味のない例外処理

以下に、意味のない例外処理の一例を書いた。

def method1(str_number):
    try:
        error_method(str_number)
    except ValueError as e:
        raise(e)

def method2(str_number):
    error_method(str_number)

def error_method(str_number):
    number = int(str_number)

if __name__ == "__main__":
    method1('1.0')
    # method2('1.0')

method1method2の違いは、例外を受け取ったらそのまま例外を投げるだけの処理が書かれてあるかどうか。しかし、method1のexcept句の処理は、なんの役割も果たしていない。

どう無意味か

受け取った例外をそのまま投げても、処理が変わることがほぼないという点で無意味だと言える。

method1の実行エラーは以下の通り。

  File "d:\programs\test\main.py", line 16, in <module>
    method1()
  File "d:\programs\test\main.py", line 5, in method1
    raise(e)
  File "d:\programs\test\main.py", line 3, in method1
    error_method()
  File "d:\programs\test\main.py", line 12, in error_method
    number = int('1.0')
ValueError: invalid literal for int() with base 10: '1.0'

method2の実行エラーは以下の通り。

  File "d:\programs\test\main.py", line 16, in <module>
    method2()
  File "d:\programs\test\main.py", line 9, in method2
    error_method()
  File "d:\programs\test\main.py", line 12, in error_method
    number = int('1.0')
ValueError: invalid literal for int() with base 10: '1.0'

どちらも、エラーの原因となっているerror_methodで怒られているというのを表している。しかし、method1では例外に対して処理をなにも行っていない。システムのユーザに分かりやすいエラーメッセージを出すよう加工するといったことを行うならば、例外処理の意味が出てくるので、そのような処理を記述するべきだと考える。

上記のような処理、例外処理を覚えたてのタイミングで散見されるイメージがあるので、意味のある例外処理を書くように心がけたい。



この記事が気に入ったらサポートをしてみませんか?