我有这个代码,我使用的是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提示符。怎么做?
答案 0 :(得分:2)
从代码中,函数从Cmd.onecmd调用(即使在循环中)。
您可以简单地覆盖它:
def onecmd(self, line):
try:
return super().onecmd(line)
except:
# display error message
return False # don't stop
优点是您不会停止命令循环。
答案 1 :(得分:1)
你可以覆盖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
通过。