AI の出力チェック4 択難易度 標準

状況

決済処理が時々落ちるので、AI アシスタントに「エラーで止まらないようにして」と頼んだら、次のコードが返ってきた。

このコードへの指摘として最も重要なのは?

try:    charge(order)except Exception:    passmark_as_paid(order)

正答

  1. except Exception では KeyboardInterrupt を捕まえられないので BaseException にすべき
  2. pass は何もしないので、continue と書いたほうが意図が伝わる
  3. 決済が失敗しても例外を握りつぶし、未払いの注文を支払い済みにしてしまう
  4. mark_as_paid を try の前に移せば、決済が失敗しても記録は残る

解説

charge が失敗して例外が出ても except で捨てられ、次の行で支払い済みとして記録される。代金を受け取っていない注文が出荷される事故につながる。「止まらないように」という依頼に対して、AI は例外を握りつぶす形をよく返す。失敗はログに残し、支払い済みにしないで呼び出し元に失敗を返すのが正しい。BaseException にすると Ctrl+C まで握りつぶし、さらに悪くなる。continue はループの外では構文エラーになる。mark_as_paid を前に移すと、決済の前に支払い済みになる。

参考: docs.python.org

pythonexceptionpayment

この問題を含む AI の出力チェック のテストを制限時間つきで解く

AI の出力チェッククイズへ