Hi Pietro, thank you for taking the time to clarify this -- Perfect! Note to self: use parentheses in complex if statements (and not only!).
Nikos --%<--- On Tuesday 14 of May 2013 14:43:55 Pietro wrote: > Hi Nikos, > > On Tue, May 14, 2013 at 1:25 PM, Nikos Alexandris > > z<n...@nikosalexandris.net> wrote: > > I know the following is a pure python question -- still, can someone shed > > some light on why is there such a difference between > > > > if 'DATE_ACQUIRED' or 'ACQUISITION_DATE' in line: > > and > > > > if 'DATE_ACQUIRED' in line or 'ACQUISITION_DATE' in line: > > ? > > Your error is due to the precedence of the operator, what it is really > written in the first row is: > > if ( ('DATE_ACQUIRED') or ('ACQUISITION_DATE' in line) ): > > Therefore the first statement 'DATE_ACQUIRED' is always True because > is a string that it is not empty. > > Let me define a function like: > >>> def istrue(obj): > ... if obj: > ... return True > ... return False > ... > > Now If you try with an empty string you have: > >>> istrue('') > > False > > If you try with a string that contains something you get: > >>> istrue('DATE_ACQUIRED') > > True > > Therefore the second is correct because you check if the first string > is contained or the second string is contained in the line. > > An easy way to debug this kind of problems is to use python debugger > [1] (possibly the ipython dubugger! [2]) in the line before, like: > > import ipdb; ipdb.set_trace() # or import pdb; pdb.set_trace() > # set_trace will open a terminal to debug your program from this point... > if 'DATE_ACQUIRED' in line or 'ACQUISITION_DATE' in line: > [etc] > > > Have fun with python! :-) > > All the best. > > Pietro > > > [0] http://www.isthe.com/chongo/tech/comp/c/c-precedence.html > [1] http://docs.python.org/2/library/pdb.html > [2] https://pypi.python.org/pypi/ipdb _______________________________________________ grass-dev mailing list grass-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/grass-dev