python - Why is fileinput.input object not lost when going out-of-scope? -


in following code expect python freeing fileinput.input when i'm returning in middle loop going out-of-scope. however, when calling again function fileinput tells me

raise runtimeerror, "input() active" 

here code:

def func(inplace):     line in fileinput.input(sys.argv[1], inplace=inplace):         [..]         if condition:              return true         [..]  if func(false):     func(true) 

i expect behavior when using yield not when using return.

i'm using python 2.7.3.

is there way force reset of fileinput?

edit:

when calling fileinput.close() before returning works. why not done implicitly?

edit 2: @matslindh

replacing

for line in fileinput.input(sys.argv[1], inplace=inplace): 

with

for line in fileinput.fileinput(sys.argv[1], inplace=inplace): 

does want, because returns object goes out-of-scope in defined manner. assumed fileinput.input() that, no. using global instance.

there nothing here can go out of scope - you're calling function in module has been imported, , fileinput 1 of modules has global state, since future calls fileinput maps made input call.

you should able work around using fileinput class instead, recreated next time call func() , using with object.

or - discovered, calling close() resets internal module state.


Comments

Popular posts from this blog

symfony - TEST environment only: The database schema is not in sync with the current mapping file -

twig - Using Twigbridge in a Laravel 5.1 Package -

jdbc - Not able to establish database connection in eclipse -