diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py index c0246705c..19bdc244a 100755 --- a/cmd2/cmd2.py +++ b/cmd2/cmd2.py @@ -689,7 +689,7 @@ def pexcept(self, msg: Any, *, end: str = '\n', apply_style: bool = True) -> Non if apply_style: final_msg = ansi.style_error(final_msg) - if not self.debug: + if not self.debug and 'debug' in self.settable: warning = "\nTo enable full traceback, run the following command: 'set debug true'" final_msg += ansi.style_warning(warning) diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py index 6cab69d6e..a856c1d6b 100755 --- a/tests/test_cmd2.py +++ b/tests/test_cmd2.py @@ -670,6 +670,17 @@ def test_base_debug(base_app): out, err = run_cmd(base_app, 'edit') assert err[0].startswith('Traceback (most recent call last):') +def test_debug_not_settable(base_app): + # Set debug to False and make it unsettable + base_app.debug = False + del base_app.settable['debug'] + + # Cause an exception + out, err = run_cmd(base_app, 'bad "quote') + + # Since debug is unsettable, the user will not be given the option to enable a full traceback + assert err == ['Invalid syntax: No closing quotation'] + def test_edit_file(base_app, request, monkeypatch): # Set a fake editor just to make sure we have one. We aren't really going to call it due to the mock base_app.editor = 'fooedit'