このコードはあなたにとって興味深いかもしれません。
トレースバックを実行し、最初に表示されないファイルを削除します。そして、それは、Pythonの挙動をシミュレート:トレースバックに複数のファイルが含まれている場合
Traceback (most recent call last):
にのみ表示されます。 これはちょうど私の余分なフレームがそこになかったかのように見えます。
ここに私のコードは、文字列text
があると仮定:
try:
exec(text)
except:
# we want to format the exception as if no frame was on top.
exp, val, tb = sys.exc_info()
listing = traceback.format_exception(exp, val, tb)
# remove the entry for the first frame
del listing[1]
files = [line for line in listing if line.startswith(" File")]
if len(files) == 1:
# only one file, remove the header.
del listing[0]
print("".join(listing), file=sys.stderr)
sys.exit(1)
私はdownvoted、ここに理由があります:この回答は良いアドバイスを提供しますが、それは実際に質問に答えるものではありません。 –
@BryanOakley:アドバイスが非常に関連していて、コメントに収まるには大きすぎる場合、それは答えに属します。どちらかというと、知識をSOから遠ざけておくことは非常に悲しいことです。だから、私はこれらのケースでダウンボートが適切だとは思わない。 – max
@max:あなたが正しいと思います。私は自分自身もこのような質問に答えています - 「あなたはそれをすることができますが、なぜここに考えるべきか」責任を持ってくれてありがとう。私ができるなら私は私の投票を変更するだろう。 –