Exceptions in micro python

  • try:
    except Exception as 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?

  • Banned

    This post is deleted!

  • 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[1].split(','); line=line[1]; error=s[2]; 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:

    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.

  • @kjm in documentation function prototype is

    sys.print_exception(exc, file=sys.stdout)

    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)

Log in to reply

Pycom on Twitter