rokpoto.com
rokpoto.com

Reputation: 10794

yield inside with block in python function

I don't understand what's happening when the following function is called:

def doSmth(inFile):
    print inFile
    with open(inFile,'r') as trainSet:
        for instLine in trainSet:

            # do smth
            yield instLine

why when the last line with yield is removed there's an error that the file doesn't exist (it really doesn't exist). Whereas, when I have the line , there's no error. Another question, why in the second case, print inFile has no effect while it has in the first case. Thanks.

Upvotes: 1

Views: 1066

Answers (1)

jamylak
jamylak

Reputation: 133764

Because you aren't actually iterating over the generator:

You have something similar to this in your code:

doSmth() # simply creates generator without advancing it

without the for x in doSmth()

Upvotes: 3

Related Questions