状況
決済処理が時々落ちるので、AI アシスタントに「エラーで止まらないようにして」と頼んだら、次のコードが返ってきた。
このコードへの指摘として最も重要なのは?
try: charge(order)except Exception: passmark_as_paid(order)正答
- except Exception では KeyboardInterrupt を捕まえられないので BaseException にすべき
- pass は何もしないので、continue と書いたほうが意図が伝わる
- 決済が失敗しても例外を握りつぶし、未払いの注文を支払い済みにしてしまう
- mark_as_paid を try の前に移せば、決済が失敗しても記録は残る
解説
charge が失敗して例外が出ても except で捨てられ、次の行で支払い済みとして記録される。代金を受け取っていない注文が出荷される事故につながる。「止まらないように」という依頼に対して、AI は例外を握りつぶす形をよく返す。失敗はログに残し、支払い済みにしないで呼び出し元に失敗を返すのが正しい。BaseException にすると Ctrl+C まで握りつぶし、さらに悪くなる。continue はループの外では構文エラーになる。mark_as_paid を前に移すと、決済の前に支払い済みになる。
参考: docs.python.org
この問題を含む AI の出力チェック のテストを制限時間つきで解く
AI の出力チェッククイズへ