"中文編程"知乎專欄 "原文地址" 參考了周蟒的實現, 運行效果如下: 完整源碼在: "解釋器.py" 相關源碼如下, 即改寫 方法. 僅為演示之用, 直接用了字元串替換.: 定製 貌似更為合適, 還需研究如何實現. 參考資料 "周蟒 zhpy" ...
"中文編程"知乎專欄原文地址
參考了周蟒的實現, 運行效果如下:
$ python3 解釋器.py
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(ZhPyConsole)
>>> 學
Traceback (most recent call last):
File "<console>", line 1, in <module>
命名錯誤: 命名'學'未定義
>>> for i in range(1,4):
... 生
...
Traceback (most recent call last):
File "<console>", line 2, in <module>
命名錯誤: 命名'生'未定義
完整源碼在: 解釋器.py
相關源碼如下, 即改寫InteractiveInterpreter.showtraceback
方法. 僅為演示之用, 直接用了字元串替換.:
def showtraceback(self):
sys.last_type, sys.last_value, last_tb = ei = sys.exc_info()
sys.last_traceback = last_tb
try:
行 = traceback.format_exception(ei[0], ei[1], last_tb.tb_next)
漢化行 = []
if sys.excepthook is sys.__excepthook__:
for 某行 in 行:
for 英文 in self.字典:
某行 = 某行.replace(英文, self.字典[英文])
漢化行.append(某行)
self.write(''.join(漢化行))
else:
# If someone has set sys.excepthook, we let that take precedence
# over self.write
sys.excepthook(ei[0], ei[1], last_tb)
finally:
last_tb = ei = None
定製sys.excepthook
貌似更為合適, 還需研究如何實現.