import io import os import sys def main(): class MyException(Exception): pass class MyFileIO(io.FileIO): def __setattr__(self, name, value): if name == "name": raise MyException("blocked setting name") return super(MyFileIO, self).__setattr__(name, value) fd = os.open(__file__, os.O_RDONLY) try: MyFileIO(fd) except MyException: pass else: return # exception set is cleared after except clause (3.x) if sys.version_info[0] < 3: sys.exc_clear() res = os.close(fd) assert(res is None) if __name__ == '__main__': main()