Checking if elements are empty
whamil1 at entergy.com
Tue Sep 11 13:40:28 CEST 2007
> From: Steve Holden
> Neil Cerutti wrote:
> > On 2007-09-10, Chris Mellon <arkanes at gmail.com> wrote:
> >> On 9/10/07, Neil Cerutti <horpner at yahoo.com> wrote:
> >>> Agreed; but I prefer 'if y == ""', absent more context and
> >>> better names.
> >> Probably should use u"" if you're going to take that route, as
> >> this will fail spuriously if y contains a unicode string
> >> that can't be implicitly converted to ascii. Personally, I
> >> prefer the boolean check and I'll let operations fail elsewhere
> >> if there's a type mismatch.
> > I have a quibble not with the functionality of the boolean check,
> > but with its expressiveness. if y == "" expresses more, i.e.,
> > that I expect y to contain a Python byte string.
> I have a quibble with a test that will raise an exception when the
> anticipated condition is true. Your test is patently absurd, as you
> would have discovered had you bothered to try it:
> >>> y = ""
> >>> if y == "":
> ... print "True"
> ... else:
> ... print "False"
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> IndexError: string index out of range
> Further, when the string is *not* the null string the test will always
> return False, as you will be comparing two strings of unequal length.
> So, absent a solution that works, len(y) == 0 looks pretty good.
Going back to the OP, the problem is taking a string such as
>>> x = ' \t"ff'
then splitting that string like this
>>> y = x.split('\t')
The question is, does the first element of the list y contain an empty
string or not? In this case, the logic in the following conditional is
>>> if y == "":
... print "True"
... print "False"
(len(y) == 0) would also work, and is the solution you originally
gave the OP.
More information about the Python-list