当コラムでは、PythonZen & PEP 8 検定試験(こちらでオンライン受験できます)で出題されている問題の解説を行なっています。当コラムシリーズを読んで自信がついたら、ぜひ試験に挑戦してみてくださいね。
今回のコラムで解説する試験問題はこちらです。
問題
格言「Errors should never pass silently.」に準拠しているコードを、次の選択肢の中から選びなさい。
try:
import this
except ImportError:
pass
try:
import this
except ImportError:
print('this is not available')
def division_function(a, b):
try:
return a / b
except:
pass
finally:
return 0
def division_function(a, b):
try:
return a / b
except ZeroDivisionError as error:
raise error
finally:
return 0
解答のヒント
この格言を和訳すると、「エラーは決してサイレントにpassされるべきではない」となります。つまり、発生したエラーを無視してはいけないということです。
try:
import this
except ImportError:
pass
1つ目の選択肢では、ImportError
を受け取った後に、黙って pass
しています。
try:
import this
except ImportError:
print('this is not available')
2つ目の選択肢では、ImportError
を受け取った後に、エラーメッセージを出力しています。
def division_function(a, b):
try:
return a / b
except:
pass
finally:
return 0
3つ目の選択肢では、どんなエラーが発生しても何もせず pass
し、finally
ブロックでも return 0
しかしていません。
def division_function(a, b):
try:
return a / b
except ZeroDivisionError as error:
raise error
finally:
return 0
4つ目の選択肢では、ZeroDivisionError
が発生した場合にエラーを投げていますが、finally
ブロックではそのエラーが無視されています。
「Errors should never pass silently.」に準拠しているコードが4つの中のどれだか分かりましたでしょうか? 今回の問題は少し簡単すぎたかもしれませんね。
Zen of Pythonは、Python言語の設計哲学を端的に表現しており、Pythonのコミュニティでは広く受け入れられています。これらの格言は、Pythonのコードを書く際の指針となっています。
正解について
ここまで正解のヒントをご紹介しましたが、いかがでしょうか? この問題はPythonZen & PEP 8 検定試験で出題されています。
自信がついたら、PythonZen & PEP 8 検定試験 で実際に試験を受けてみましょう。