On 2007-10-25, Pete Bartonly <[EMAIL PROTECTED]> wrote: > > Quick question, probably quite a simple matter. Take the follow start of > a method: > > > def review(filesNeedingReview): > > for item in filesNeedingReview: > (tightestOwner, logMsg) = item > > if (logMsg != None): > for logInfo in logMsg.changed_paths: > > > This generates the error: > > UnboundLocalError: local variable 'logMsg' referenced before assignment
This should work, are you sure you didn't make a typo in one of the names? Another way to make this fail would be when the if-condition is outside the loop (is the indentation correct in your code?). A short demontration: >>> def r(fnr): ... for item in fnr: ... w,m = item ... if m == 2: ... print w ... >>> fnr = [(1,2), (3,4)] >>> r(fnr) 1 With respect to compactness and style, you can move your multi-assignment statement in the for loop, as in for tightestOwner, logMsg in filesNeedingReview: Also, brackets around conditions (in the if) are not needed, and comparing against None is usually done with 'is' or 'is not' instead of '==' or '!='. The result is then if logMsg is not None: > I thought I'd assigned it in the "(tightestOwner, logMsg) = item" line - > so in the python interpreter complaining about the fact this assignment > might not go well? No, you'd get an error at that point in that case. Sincerely, Albert -- http://mail.python.org/mailman/listinfo/python-list
