Exceptions in micro python
try: 1/0 except Exception as e: sys.print_exception(e)
division by zero Traceback (most recent call last): File "<stdin>", line 4, in <module> ZeroDivisionError: division by zero
But I'd like to be able to store the error and the line number that produced it in a file instead of printing it. Storing the error is easy enough
with open('ErrorFile', 'wb') as f: f.write(str(e))
but I can't figure out a way to access & store the line number. Anyone out there in the pycom firmament mastered this trick?
Thnx again Robert, for anyone else with a similar requirement I ended up with....
except Exception as e: import sys; from uio import StringIO s=StringIO(); sys.print_exception(e, s) s=s.getvalue(); s=s.split('\n') line=s.split(','); line=line; error=s; err=error+line; print(err) with open ('error.log', 'a') as f: f.write(err)
@kjm follow these steps. I just executed at the prompt:
>>> from uio import StringIO >>> import sys >>> s = StringIO() >>> try: ... 1/0 ... except Exception as e: ... sys.print_exception(e, s) ... >>> x=s.getvalue() >>> x 'Traceback (most recent call last):\n File "<stdin>", line 2, in <module>\nZeroDivisionError: divis ion by zero\n' >>>
Hey Robert I need to filter out the double inverted commas before I store in the error.log file I tried
but I got AttributeError: 'NoneType' object has no attribute 'replace'
Ah, perfect! Tanks muchly.
@kjm You could do as follows:
try: 1/0 except Exception as e: import sys with open("error.log", "a") as f: sys.print_exception(e, f)
This works for me,
Pycom MicroPython 1.20.0.rc6 [8d824a0-dirty] on 2019-01-28; FiPy with ESP32
Anybody out there manage to store traceback line numbers to a file on the gpy?
@kjm I'll have to check that tonight. I have no device here at the moment.
not on the gpy you can't!
@eric73 just tried thst on windows MP. If you open a file beforehand, you can use that file handle as second argument to sys.print_exception.
Eric73 last edited by
@kjm in documentation function prototype is
Have you try to open a file and use it with sys.print_exception to see what happened inside the file?
(Sorry i have no module to test)