考虑这段代码:
#!/usr/bin/env python3
from cmd import Cmd
import readline
class mycmd(Cmd):
def match_display_hook(self, substitution, matches, longest_match_length):
someNonexistentMethod()
print()
for match in matches:
print(match)
print(self.prompt, readline.get_line_buffer(), sep='', end='', flush=True)
def do_crash(self, s):
someNonexistentMethod()
def do_quit(self, s):
return True
if __name__ == '__main__':
obj = mycmd()
readline.set_completion_display_matches_hook(obj.match_display_hook)
obj.cmdloop()
我希望看到NameError: name 'someNonexistentMethod' is not defined
当我运行它并点击TabTab. 但是,实际上似乎根本没有发生任何事情(确实发生了错误,因此打印完成的其他函数不会运行;我只是没有看到错误)。我在运行时确实看到了预期的错误crash
,所以我知道错误处理在整个程序中运行良好,但只是在set_completion_display_matches_hook
回调内部被破坏了。为什么会这样,我可以做些什么吗?