__all__ = ['ntempfile'] from tempfile import NamedTemporaryFile from contextlib import contextmanager from os import unlink @contextmanager def ntempfile(mode='w+b', bufsize=-1, suffix='', prefix='tmp', dir=None, delete=True): f = NamedTemporaryFile(mode=mode, bufsize=bufsize, suffix=suffix, prefix=prefix, dir=dir, delete=False) try: yield f except StopIteration: pass except Exception: print "Exception caught, not deleting: ", f.name delete = False raise finally: if delete: try: unlink(f.name) except OSError: pass