How to print error message without traceback in Python
In this short guide, I’ll show you several options to print only the error message without the traceback in Python.
This is very useful for presentations or when you have extremely long messages which are not needed.
Option 1: Print Error Message without Traceback with SystemExit(err)
The first option which we will use is using: SystemExit(err)
.
We are going to catch any exception and handle it. then we are going to print out only the error message.
To show only the error message use the next syntax:
try:
pd.to_datetime(df['date'])
except Exception as err:
raise SystemExit(err)
result:
An exception has occurred, use %tb to see the full traceback.
SystemExit: Out of bounds nanosecond timestamp: 1-06-13 00:00:00
by default the code below
import pandas as pd
pd.to_datetime(df['date'])
would raise very long error message:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/myuser/Software/Tensorflow/environments/venv36/lib/python3.6/site-packages/pandas/core/arrays/datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object)
2058 try:
-> 2059 values, tz_parsed = conversion.datetime_to_datetime64(data)
2060 # If tzaware, these values represent unix timestamps, so we
pandas/_libs/tslibs/conversion.pyx in pandas._libs.tslibs.conversion.datetime_to_datetime64()
TypeError: Unrecognized value type: <class 'str'>
During handling of the above exception, another exception occurred:
OutOfBoundsDatetime Traceback (most recent call last)
<ipython-input-20-6dea9b57a428> in <module>()
----> 1 pd.to_datetime(df['date'])
/home/myuser/Software/Tensorflow/environments/venv36/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in to_datetime(arg, errors, dayfirst, yearfirst, utc, format, exact, unit, infer_datetime_format, origin, cache)
801 result = arg.map(cache_array)
802 else:
--> 803 values = convert_listlike(arg._values, format)
804 result = arg._constructor(values, index=arg.index, name=arg.name)
805 elif isinstance(arg, (ABCDataFrame, abc.MutableMapping)):
/home/myuser/Software/Tensorflow/environments/venv36/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in _convert_listlike_datetimes(arg, format, name, tz, unit, errors, infer_datetime_format, dayfirst, yearfirst, exact)
464 errors=errors,
465 require_iso8601=require_iso8601,
--> 466 allow_object=True,
467 )
468
/home/myuser/Software/Tensorflow/environments/venv36/lib/python3.6/site-packages/pandas/core/arrays/datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object)
2062 return values.view("i8"), tz_parsed
2063 except (ValueError, TypeError):
-> 2064 raise e
2065
2066 if tz_parsed is not None:
/home/myuser/Software/Tensorflow/environments/venv36/lib/python3.6/site-packages/pandas/core/arrays/datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object)
2053 dayfirst=dayfirst,
2054 yearfirst=yearfirst,
-> 2055 require_iso8601=require_iso8601,
2056 )
2057 except ValueError as e:
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas/_libs/tslibs/conversion.pyx in pandas._libs.tslibs.conversion.convert_datetime_to_tsobject()
pandas/_libs/tslibs/np_datetime.pyx in pandas._libs.tslibs.np_datetime.check_dts_bounds()
OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-06-13 00:00:00
Option 2: Print Error Message without Traceback with traceback.print_exc(limit=1)
One more alternative solution is to use traceback.print_exc(limit=1)
. The usage can be found below:
import pandas as pd
import traceback
try:
pd.to_datetime('Jun 1, 1111')
except Exception as e:
traceback.print_exc(limit=1)
exit(1)
The result error will be:
Traceback (most recent call last):
File "/home/vanx/Software/Tensorflow/environments/venv36/lib/python3.6/site-packages/pandas/core/arrays/datetimes.py", line 2059, in objects_to_datetime64ns
values, tz_parsed = conversion.datetime_to_datetime64(data)
TypeError: Unrecognized value type: <class 'str'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<ipython-input-22-ee6c6bd48a55>", line 5, in <module>
pd.to_datetime('Jun 1, 1111')
pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1111-06-01 00:00:00
Option 3: Print Error Message without Traceback with sys.tracebacklimit
Finally you can decrease the limit of the traceback by: sys.tracebacklimit
.
To set the minimum level of traceback use:
import sys
sys.tracebacklimit = 0