こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

most recent call last の意味

python のエラーメッセージに含まれる most recent call last とはどういう意味ですか? 「こういうときに出るエラーメッセージだ」みたいな説明ではなくて、英文和訳のように単語ごとの意味が知りたいです。ふつうの文章として意味がわかりそうでわからないので気持ち悪くてしょうがないです…

投稿日時 - 2018-10-20 16:10:13

QNo.9549526

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

Tracebackだと、通常はエラーが発生した命令の位置から呼び出し履歴を遡っていくものですが、そうするとエラーが発生した位置の表示がスクロールしないと見えなくなる可能性が高くなります。なので、表示として直前の呼び出し履歴が最後の方に表示される順序だということを注釈しているにすぎません。
普通の文章としてみるとおかしく思えるかもしれませんが、「Lady first」などと同じです。これが間違った英語だというと、某大統領が連呼した「America first」も間違いになります。

投稿日時 - 2018-10-22 15:12:39

ANo.1

英語的には「間違って」いますね。
と言うより、簡易表示用の省略表現になっています。

What does “most recent call last” mean?:
https://ell.stackexchange.com/questions/37672/what-does-most-recent-call-last-mean

つまり、

The most recent call is last. (直近の「(関数)呼び出し」は最後にありますよ)

の意です。

例えば、こうしますよね。

>>> def foo(): # エラーをわざと起こす関数
  return 1/0

>>> def bar():
  print(foo())


>>>

それでbarを呼び出してみると当然エラーを吐くんですが。

>>> bar()
Traceback (most recent call last):
 File "<pyshell#13>", line 1, in <module>
  bar()
 File "<pyshell#12>", line 2, in bar
  print(foo())
 File "<pyshell#10>", line 2, in foo
  return 1/0
ZeroDivisionError: division by zero
>>>

当然プログラムを書いた側も

barを呼び出す->fooを呼び出す->1/0を計算する(からエラーになる)

って事が分かっているわけですが、トレースバックも「最後」に表示された直近の呼び出しであるreturn 1/0が「おかしい」と言っていますね。そこがmost recent callで、エラー表示の位置がlastになってるよ、ってわけです。

投稿日時 - 2018-10-20 19:37:58

あなたにオススメの質問