Python cmd模块:捕获异常后返回提示符

5

我有这段代码,使用的是Python 3:

import cmd
class myShell(cmd.Cmd):
    def do_bad(self, arg):
        raise Exception('something bad happened')


if __name__ == '__main__':
    sh = myShell()
    sh.cmdloop()

我想在异常被抛出后返回shell提示符。如何做到这一点?
2个回答

5

从代码中可以看出,这些函数是从Cmd.onecmd中调用的(即使在循环中也是如此)。

你可以简单地覆盖它:

def onecmd(self, line):
    try:
        return super().onecmd(line)
    except:
        # display error message
        return False # don't stop

优点是您不会停止命令循环。

3

你可以重写cmdloop函数来包装原始的cmdLoop调用:

class myShell(cmd.Cmd):
    def do_bad(self, arg):
        raise Exception('something bad happened')
    def cmdLoop(self):
       try:
           cmd.Cmd.cmdLoop(self)
       except Exception as e:
           print("recovered from exception {}".format(e))

包装器将允许SystemExit和KeyboardInterrupt通过。

似乎对我没有起作用。可能是因为我正在使用Python3。(即使将“cmdLoop”更改为“cmdloop”) - thengineer
@ErikAronesty 我想那是对“thengineer”的回复。顺便说一下,你的评论中有个分号打错了,应该写成 while True: super().cmdloop() :) - Jean-François Fabre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接