python / python/cpython

Improve ``NameError`` message when non-mangled name exists in the global scope

オープン
#119,901 コメント 9 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

interpreter-core type-feature
主要言語
Python
スター
77.2k
フォーク
35.9k
PR マージ指標
PR 指標を取得中

説明

Bug report

Bug description:

Here is the code:

def __a():
    print("A")


class A:
    def b(self):
        __a()


a = A()
a.b()

It was expected to show a short message "A". However, I got a NameError:

❯ python3.12 bug\ represent.py
Traceback (most recent call last):
  File "/home/PC-Killer/python_work/Demos/bug represent.py", line 11, in <module>
    a.b()
  File "/home/PC-Killer/python_work/Demos/bug represent.py", line 7, in b
    __a()
    ^^^
NameError: name '_A__a' is not defined
❯ python3.13 bug\ represent.py
Traceback (most recent call last):
  File "/home/PC-Killer/python_work/Demos/bug represent.py", line 11, in <module>
    a.b()
    ~~~^^
  File "/home/PC-Killer/python_work/Demos/bug represent.py", line 7, in b
    __a()
    ^^^
NameError: name '_A__a' is not defined

It seems that the name had been translated in an unexpected way.

CPython versions tested on:

3.12, 3.13

Operating systems tested on:

Linux

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

提供された bug represent.py の再現プログラムを、報告された Python バージョンで実行します。CPython のソースファイルやテストは指定されていないため、既存の name-mangling と NameError の候補表示に関するテストを見つけ、それらのエントリポイントを追跡します。完了条件は、関連する NameError の動作を後退させることなく、例が意図した簡潔なメッセージを生成することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
38/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。