Был дан ответ для декоратора; он работает на этапе определения функции в соответствии с запросом.
В Python 2.5+ вы также можете сделать это на этапе call , используя менеджер контекста:
from __future__ import with_statement # needed for 2.5 ≤ Python < 2.6
import contextlib, os
@contextlib.contextmanager
def remember_cwd():
curdir= os.getcwd()
try: yield
finally: os.chdir(curdir)
, который может использоваться при необходимости во время вызова функции как:
print "getcwd before:", os.getcwd()
with remember_cwd():
walk_around_the_filesystem()
print "getcwd after:", os.getcwd()
Это хороший вариант иметь.
РЕДАКТИРОВАТЬ: я добавил обработку ошибок, как предложено codeape. Поскольку за мой ответ проголосовали, справедливо предложить полный ответ, за исключением всех других вопросов.