adafruit / circuitpython

CircuitPython - a Python implementation for teaching coding with microcontrollers
https://circuitpython.org
Other
4.09k stars 1.21k forks source link

errno.EROFS isn't available but its error string is #9733

Open ricknun opened 3 hours ago

ricknun commented 3 hours ago

CircuitPython version

Adafruit CircuitPython 9.1.4 on 2024-09-17; Adafruit Circuit Playground Bluefruit with nRF52840

Code/REPL

...
import errno
...
try:
    with open("/textfile.txt", "a") as fp:
        ...
except OSError as e:
    print(e)  # for example prints "[Errno 30] Read-only filesystem"
    if e.errno == 30:
    ...

Behavior

The provided code works fine. The "print(e)" results in the string "[Errno 30] Read-only filesystem" and "if e.errno == 30" works as expected. But if I replace "30" with "errno.EROFS" (as described at https://docs.circuitpython.org/en/latest/docs/library/errno.html) I get "During handling of the above exception, another exception occurred" and "AttributeError: 'module' object has no attribute 'EROFS'".

Description

I would expect to have either both the string and enum (hopefully, since this is such a common error), or neither.

Additional information

See https://forums.adafruit.com/viewtopic.php?p=1032465 where this issue was discussed with Dan Halbert. Most important, I think the list of strings and list of enums in moderrno.c should agree and both include Read-Only File System. Less important (but it sure would have helped me), the documentation at https://docs.circuitpython.org/en/latest/docs/library/errno.html could be improved from "The codes available may vary per CircuitPython build" (please avoid disclaimers like this) to where to find the list that applies to my situation.

ricknun commented 3 hours ago

I just noticed Dan addressed this yesterday. See https://github.com/adafruit/circuitpython/pull/9731.

ricknun commented 2 hours ago

But I don't think Dan's issue https://github.com/adafruit/circuitpython/pull/9731 addresses my request above for improved documentation...