Eryk Sun <eryk...@gmail.com> added the comment:
ctypes.windll is an instance of ctypes.LibraryLoader, which has a __getattr__ method that calls ctypes.WinDLL(name) and caches the result as an instance attribute. I suppose with chained exceptions it's reasonable to handle OSError in __getattr__ by raising AttributeError. For example: class A: def __init__(self, name): raise OSError class B: def __getattr__(self, name): try: A(name) except OSError: raise AttributeError Demo: >>> b = B() >>> b.test Traceback (most recent call last): File "<stdin>", line 4, in __getattr__ File "<stdin>", line 3, in __init__ OSError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 6, in __getattr__ AttributeError >>> hasattr(b, 'test') False FYI, I recommend avoiding the cdll and windll LibraryLoader instances. I wish they were deprecated because globally caching CDLL and WinDLL instances leads to conflicts between projects that use the same shared libraries. ---------- nosy: +eryksun stage: -> test needed versions: +Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34816> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com