"中文程式設計"知乎專欄 原文位址
續前文 擴充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