0
try:
    dict_value = a_dictionary[name]
    
except KeyError:
    sys.exit('Mistake')
    
return dict_value

This is my code. I want the code to stop and to return an error message.

But I get a long error that says assertion error and more. (30+ rows). It should just system Exit: 'Mistake'

Here is the error that I get when running this exact piece of code:

I will copy / this same sentence a few more times, as stackoverflow doesn't let me paste such large error code vs normal text. I will copy / this same sentence a few more times, as stackoverflow doesn't let me paste such large error code vs normal text. I will copy / this same sentence a few more times, as stackoverflow doesn't let me paste such large error code vs normal text.

    KeyError                                  Traceback (most recent call last)
Input In [30], in SIM_Format_checker(dict_values)
    128 try:
--> 129     dict_value = a_dictionary[simformat_name]
    131 except KeyError as e:

KeyError: 'Mistake Example'

During handling of the above exception, another exception occurred:

SystemExit                                Traceback (most recent call last)
    [... skipping hidden 1 frame]

Input In [30], in <cell line: 136>()
    134     return dict_value
--> 136 SIM_Format_checker(dict_values)

Input In [30], in SIM_Format_checker(dict_values)
    131 except KeyError as e:
--> 132     sys.exit('This is a mistake')
    134 return dict_value

SystemExit: This is a mistake

During handling of the above exception, another exception occurred:

AssertionError                            Traceback (most recent call last)
    [... skipping hidden 1 frame]

File ~\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py:1972, in InteractiveShell.showtraceback(self, exc_tuple, filename, tb_offset, exception_only, running_compiled_code)
   1969 if exception_only:
   1970     stb = ['An exception has occurred, use %tb to see '
   1971            'the full traceback.\n']
-> 1972     stb.extend(self.InteractiveTB.get_exception_only(etype,
   1973                                                      value))
   1974 else:
   1975     try:
   1976         # Exception classes can customise their traceback - we
   1977         # use this in IPython.parallel for exceptions occurring
   1978         # in the engines. This should return a list of strings.

File ~\Anaconda3\lib\site-packages\IPython\core\ultratb.py:585, in ListTB.get_exception_only(self, etype, value)
    577 def get_exception_only(self, etype, value):
    578     """Only print the exception type and message, without a traceback.
    579 
    580     Parameters
   (...)
    583     value : exception value
    584     """
--> 585     return ListTB.structured_traceback(self, etype, value)

File ~\Anaconda3\lib\site-packages\IPython\core\ultratb.py:443, in ListTB.structured_traceback(self, etype, evalue, etb, tb_offset, context)
    440     chained_exc_ids.add(id(exception[1]))
    441     chained_exceptions_tb_offset = 0
    442     out_list = (
--> 443         self.structured_traceback(
    444             etype, evalue, (etb, chained_exc_ids),
    445             chained_exceptions_tb_offset, context)
    446         + chained_exception_message
    447         + out_list)
    449 return out_list

File ~\Anaconda3\lib\site-packages\IPython\core\ultratb.py:1118, in AutoFormattedTB.structured_traceback(self, etype, value, tb, tb_offset, number_of_lines_of_context)
   1116 else:
   1117     self.tb = tb
-> 1118 return FormattedTB.structured_traceback(
   1119     self, etype, value, tb, tb_offset, number_of_lines_of_context)

File ~\Anaconda3\lib\site-packages\IPython\core\ultratb.py:1012, in FormattedTB.structured_traceback(self, etype, value, tb, tb_offset, number_of_lines_of_context)
   1009 mode = self.mode
   1010 if mode in self.verbose_modes:
   1011     # Verbose modes need a full traceback
-> 1012     return VerboseTB.structured_traceback(
   1013         self, etype, value, tb, tb_offset, number_of_lines_of_context
   1014     )
   1015 elif mode == 'Minimal':
   1016     return ListTB.get_exception_only(self, etype, value)

File ~\Anaconda3\lib\site-packages\IPython\core\ultratb.py:865, in VerboseTB.structured_traceback(self, etype, evalue, etb, tb_offset, number_of_lines_of_context)
    856 def structured_traceback(
    857     self,
    858     etype: type,
   (...)
    862     number_of_lines_of_context: int = 5,
    863 ):
    864     """Return a nice text document describing the traceback."""
--> 865     formatted_exception = self.format_exception_as_a_whole(etype, evalue, etb, number_of_lines_of_context,
    866                                                            tb_offset)
    868     colors = self.Colors  # just a shorthand + quicker name lookup
    869     colorsnormal = colors.Normal  # used a lot

File ~\Anaconda3\lib\site-packages\IPython\core\ultratb.py:799, in VerboseTB.format_exception_as_a_whole(self, etype, evalue, etb, number_of_lines_of_context, tb_offset)
    796 assert isinstance(tb_offset, int)
    797 head = self.prepare_header(etype, self.long_header)
    798 records = (
--> 799     self.get_records(etb, number_of_lines_of_context, tb_offset) if etb else []
    800 )
    802 frames = []
    803 skipped = 0

File ~\Anaconda3\lib\site-packages\IPython\core\ultratb.py:854, in VerboseTB.get_records(self, etb, number_of_lines_of_context, tb_offset)
    848     formatter = None
    849 options = stack_data.Options(
    850     before=before,
    851     after=after,
    852     pygments_formatter=formatter,
    853 )
--> 854 return list(stack_data.FrameInfo.stack_data(etb, options=options))[tb_offset:]

File ~\Anaconda3\lib\site-packages\stack_data\core.py:546, in FrameInfo.stack_data(cls, frame_or_tb, options, collapse_repeated_frames)
    530 @classmethod
    531 def stack_data(
    532         cls,
   (...)
    536         collapse_repeated_frames: bool = True
    537 ) -> Iterator[Union['FrameInfo', RepeatedFrames]]:
    538     """
    539     An iterator of FrameInfo and RepeatedFrames objects representing
    540     a full traceback or stack. Similar consecutive frames are collapsed into RepeatedFrames
   (...)
    544     and optionally an Options object to configure.
    545     """
--> 546     stack = list(iter_stack(frame_or_tb))
    548     # Reverse the stack from a frame so that it's in the same order
    549     # as the order from a traceback, which is the order of a printed
    550     # traceback when read top to bottom (most recent call last)
    551     if is_frame(frame_or_tb):

File ~\Anaconda3\lib\site-packages\stack_data\utils.py:98, in iter_stack(frame_or_tb)
     96 while frame_or_tb:
     97     yield frame_or_tb
---> 98     if is_frame(frame_or_tb):
     99         frame_or_tb = frame_or_tb.f_back
    100     else:

File ~\Anaconda3\lib\site-packages\stack_data\utils.py:91, in is_frame(frame_or_tb)
     90 def is_frame(frame_or_tb: Union[FrameType, TracebackType]) -> bool:
---> 91     assert_(isinstance(frame_or_tb, (types.FrameType, types.TracebackType)))
     92     return isinstance(frame_or_tb, (types.FrameType,))

File ~\Anaconda3\lib\site-packages\stack_data\utils.py:172, in assert_(condition, error)
    170 if isinstance(error, str):
    171     error = AssertionError(error)
--> 172 raise error

AssertionError: 
Akinnfenwa
  • 11
  • 4
  • 1
    Can you show the full traceback error?? – codester_09 Sep 26 '22 at 14:16
  • 2
    `sys.exit` accepts one argument - exit code. It should be an integer, preferably in range `[0; 127]`. If you want to exit with error message, raise an error or `print('the message'); sys.exit(1)`. – STerliakov Sep 26 '22 at 14:26
  • this might [helpful](https://stackoverflow.com/questions/25905923/python-sys-exit-not-working-in-try) – Shad0w Sep 26 '22 at 14:31
  • 1
    @SUTerliakov [`sys.exit`](https://docs.python.org/3/library/sys.html?highlight=sys#sys.exit) can also take a string argument, which is a shortcut for an exit status of 1 and an error message. – chepner Sep 27 '22 at 12:41
  • Whatever is running your code is catching *all* exceptions (including `SysExit`). – chepner Sep 27 '22 at 12:42
  • @chepner wow, thank you! I was sure that `SystemExit` and `sys.exit()` are limited to `(code: int)` signature. – STerliakov Sep 27 '22 at 13:25

0 Answers0