repr(e)-- это, конечно хорошо, но ведь есть ещё лучше, а именно: from traceback import print_exc ... my_dict = {} try: b = my_dict["bad"] except Exception as e: print_exc()
что выведет: Traceback (most recent call last): File "<pyshell#1>", line 2, in <module> KeyError: 'bad'
и при этом программа продолжит свою работу. А если ошибку надо выводить не в stdout, то можно сделать так: from traceback import print_exc from io import StringIO ... try: b = my_dict["bad"] except Exception: buffer = StringIO() print_exc(file=buffer) out_var = buffer.getvalue()