我有这段代码,使用的是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提示符。如何做到这一点?
从代码中可以看出,这些函数是从Cmd.onecmd中调用的(即使在循环中也是如此)。
你可以简单地覆盖它:
def onecmd(self, line):
try:
return super().onecmd(line)
except:
# display error message
return False # don't stop
你可以重写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))
while True: super().cmdloop()
:) - Jean-François Fabre