天天看點

擴充Python控制台實作中文回報資訊之二-正則替換

"中文程式設計"知乎專欄 原文位址

擴充Python控制台實作中文回報資訊之二-正則替換
續前文 擴充Python控制台實作中文回報資訊 , 實作了如下效果:

>>> 學
Traceback (most recent call last):
  File "<console>", line 1, in <module>
命名錯誤: 命名'學'未定義
>>> [1] + 2
Traceback (most recent call last):
  File "<console>", line 1, in <module>
類型錯誤: 隻能将list(而非"int")聯結到list
>>> [1].length
Traceback (most recent call last):
  File "<console>", line 1, in <module>
屬性錯誤: 'list'個體沒有'length'屬性
>>> def foo():
...     def bar():
...             print(type)
...     bar()
...     type = 1
... 
>>> foo()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "<console>", line 4, in foo
  File "<console>", line 3, in bar
命名錯誤: 在閉合作用域中, 自由變量'type'在引用之前未被指派           

源碼在:

program-in-chinese/study

現在支援的報錯資訊清單見測試用例:

test翻譯.py

參考

re - Regular expression operations - Python 3.7.2 documentation

, 用一系列(現8個)正規表達式比對和替換實作, 比如:

if re.match(r"NameError: name '(.*)' is not defined", 原始資訊):
    return re.sub(r"NameError: name '(.*)' is not defined", r"命名錯誤: 命名'\1'未定義", 原始資訊)           

期間發現Python編譯器源代碼中的報錯資訊所處位置比較分散, 似乎有上百處. 下面的打算:

  • 首先将它打包釋出到Pypi, 參考 Packaging Python Projects
  • 逐漸補充報錯資訊, 除了在自己使用過程中發現的新報錯資訊, 也可調研哪些報錯最為常見
  • 逐漸改進中文資訊. 比如

    隻能将list(而非"int")聯結到list

    =>

    隻能将清單(而非整數)聯結到清單

  • 上文提到的通過"定制sys.excepthook"實作尚未研究. 如無明顯優勢, 打算置後.

2019-02-18