if cmd == '':
return self.default(line)
else:
- try:
- func = getattr(self, 'do_' + cmd)
- except AttributeError:
+ func = getattr(self, 'do_' + cmd, None)
+ if func is None:
return self.default(line)
return func(arg)
"(Cmd) *** Unknown syntax: EOF\n"))
+class CmdPrintExceptionClass(cmd.Cmd):
+ """
+ GH-80731
+ cmd.Cmd should print the correct exception in default()
+ >>> mycmd = CmdPrintExceptionClass()
+ >>> try:
+ ... raise ValueError("test")
+ ... except ValueError:
+ ... mycmd.onecmd("not important")
+ (<class 'ValueError'>, ValueError('test'))
+ """
+
+ def default(self, line):
+ print(sys.exc_info()[:2])
+
def load_tests(loader, tests, pattern):
tests.addTest(doctest.DocTestSuite())
return tests
(Pdb) continue
"""
+
+def test_pdb_issue_gh_80731():
+ """See GH-80731
+
+ pdb should correctly print exception info if in an except block.
+
+ >>> with PdbTestInput([ # doctest: +ELLIPSIS
+ ... 'import sys',
+ ... 'sys.exc_info()',
+ ... 'continue'
+ ... ]):
+ ... try:
+ ... raise ValueError('Correct')
+ ... except ValueError:
+ ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
+ ... pass
+ > <doctest test.test_pdb.test_pdb_issue_gh_80731[0]>(10)<module>()
+ -> pass
+ (Pdb) import sys
+ (Pdb) sys.exc_info()
+ (<class 'ValueError'>, ValueError('Correct'), <traceback object at ...>)
+ (Pdb) continue
+ """
+
+
def test_pdb_ambiguous_statements():
"""See GH-104301
--- /dev/null
+Avoid executing the default function in :class:`cmd.Cmd` in an except block