Feature Request: Expose Handling Frame Information in Python's Traceback Module
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 36k
- PR マージ指標
- PR 指標を取得中
説明
Feature or enhancement
Proposal:
Problem: When dealing with chained exceptions in Python, there is no straightforward way to identify the "outermost handling frame": the frame in the except/finally block that starts the part of the stacktrace that's unique to the "during the handling" exception.
This information is not visible in the textual stacktrace, nor is it accessible programmatically via Python's traceback module (or similar tools).
Since this "handling frame" represents half of the link between 2 exceptions when shown in "chained mode", the fact that this information is missing makes it very hard to see how 2 chained exceptions actually relate to each other.
Proposal: Extend Python's traceback-related modules (e.g., traceback, sys.exc_info) to expose handling frame information. This would allow developers and tools to programmatically determine where exceptions are caught and re-raised in the call stack.
(It would seem to me that just changing the underlying datastructures leads to the least disruption in peoples' workflow, while still allowing for some users to extract the information if they need it)
Current Behavior:
Using the following example:
class OriginalException(Exception):
pass
class AnotherException(Exception):
pass
def raise_another_exception():
raise AnotherException()
def show_something():
try:
raise OriginalException()
except OriginalException:
raise_another_exception()
show_something()
Running this code produces:
Traceback (most recent call last):
File "example.py", line 15, in show_something
raise OriginalException()
__main__.OriginalException
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "example.py", line 20, in <module>
show_something()
File "example.py", line 17, in show_something
raise_another_exception()
File "example.py", line 10, in raise_another_exception
raise AnotherException()
__main__.AnotherException
In this traceback, line 17 (raise_another_exception()) is the handling frame, but there is no direct way to programmatically extract this information.
Proposed Improvement:
Enhance the traceback-related API(s) to expose handling frame information.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
This is obviously not actually a discussion since it doesn't involve other people, but I do think it's useful context (and it's better to keep the longer story out of the feature-request)
Linked PRs
- gh-127021
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず traceback 関連の API と sys.exc_info を読み、理解すべき動作として show_something と raise_another_exception の例を使用します。既存の作業については、リンクされた PR gh-127021 を確認してください。完了とは、traceback 関連の API が、連鎖した例外の処理フレームを定義された、利用可能な方法で公開することです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- backend-api-design
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 15/100