how to get os.py to use an ./ntpath.py instead of Lib/ntpath.py
Thomas Rachel
nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de
Wed Sep 12 02:17:11 EDT 2012
Am 11.09.2012 05:46 schrieb Steven D'Aprano:
> Good for you. (Sorry, that comes across as more condescending than it is
> intended as.) Monkey-patching often gets used for quick scripts and tiny
> pieces of code because it works.
>
> Just beware that if you extend that technique to larger bodies of code,
> say when using a large framework, or multiple libraries, your experience
> may not be quite so good. Especially if *they* are monkey-patching too,
> as some very large frameworks sometimes do. (Or so I am lead to believe.)
This sonds like a good use case for a context manager, like the one in
decimal.Context.get_manager().
First shot:
@contextlib.contextmanager
def changed_os_path(**k):
old = {}
try:
for i in k.items():
old[i] = getattr(os.path, i)
setattr(os.path, i, k[i])
yield None
finally:
for i in k.items():
setattr(os.path, i, old[i])
and so for your code you can use
print 'os.walk(\'goo\') with modified isdir()'
with changed_os_path(isdir=my_isdir):
for root, dirs, files in os.walk('goo'):
print root, dirs, files
so the change is only effective as long as you are in the relevant code
part and is reverted as soon as you leave it.
Thomas
More information about the Python-list
mailing list