This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Identity Crisis! variable assignment using strftime fails comparison test.
Type: behavior Stage:
Components: Interpreter Core Versions: Python 3.1
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: BillHawkes, exarkun
Priority: normal Keywords:

Created on 2010-09-27 15:30 by BillHawkes, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (3)
msg117449 - (view) Author: Bill Hawkes (BillHawkes) Date: 2010-09-27 15:30
See below. When variable assignment is used with strftime for the day of the week, it fails comparison checks for the days of the week. Even when using the str() function it still fails. Manual entry of variable assignment is required for a successful comparison. This pretty well defeats the purpose of computer programming (automation). There seems to be a real identity crisis here!

$ python3
Python 3.0rc1+ (py3k, Oct 28 2008, 09:23:29) 
[GCC 4.3.2] on linux2
>>> import time
>>> from datetime import date
>>> today = date.today()
>>> print("This line will always print")
This line will always print
>>> myday = today.fromordinal(today.toordinal() - 31)
>>> printthis = myday.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
>>> print("%s" % printthis)
08-27-10. 27 Aug 2010 is a Friday on the 27 day of August.
>>> # dow is Day Of Week variable
... dow = myday.strftime("%A")
>>> chkval = dow
>>> dow is chkval
True
>>> print("dow is %s" % dow)
dow is Friday
>>> print("chkval is %s" % chkval)
chkval is Friday
>>> print("%s" % dow)
Friday
>>> print("%s" % chkval)
Friday
>>> dow is chkval
True
>>> if dow is 'Sunday':
...    cntbck = 0
... elif dow is 'Monday':
...    cntbck = 1
... elif dow is 'Tuesday':
...    cntbck = 2
... elif dow is 'Wednesday':
...    cntbck = 3
... elif dow is 'Thursday':
...    cntbck = 4
... elif dow is 'Friday':
...    cntbck = 5
... elif dow is 'Saturday':
...    cntbck = 6
... else:
...    cntbck = 'undefined'
...    print("What day is it? It is %s" % dow)
... 
What day is it? It is Friday
>>> print('finished with script')
finished with script
>>> dow is 'Friday'
False
>>> dow = 'Friday'
>>> dow is 'Friday'
True
>>> chkval
'Friday'
>>> dow
'Friday'
>>> chkval is dow
False
>>>  chkval is 'Friday'
False
>>> chkval
'Friday'
>>> chkval = str(chkval)
>>> chkval
'Friday'
>>> chkval is 'Friday'
False
>>> cntbck
'undefined'
>>>
msg117450 - (view) Author: Jean-Paul Calderone (exarkun) * (Python committer) Date: 2010-09-27 15:31
You mistakenly used "is" for these comparisons, rather than "==".  The strftime involvement is a red herring.  The real problem is the use of an /identity/ comparison rather than an /equality/ comparison.
msg117509 - (view) Author: Bill Hawkes (BillHawkes) Date: 2010-09-28 08:18
Yes, it is working now. Thanks for the timely response.

In looking at the tutorial, the only "strings" used with boolean operators ("<" | ">" | "==" | ">=" | "<=" | "!=") were strings of the numeric variety. I saw no examples using words. I know the datetime module has a function for enumerating the days of the week, but it starts with Monday and ends with Sunday. I needed to start with Sunday and end with Saturday. The first thing I found for checking letter-filled strings was the "is" operator.

Perhaps a brief example of word comparisons in the tutorial would be useful. I know it would have helped me.

I can't say I have a clear understanding of the difference between the "is" and "==" operators, but I can accept that there apparently is some difference and there are situations where that difference matters. Again, thanks for the quick response.
History
Date User Action Args
2022-04-11 14:57:06adminsetgithub: 54170
2010-09-28 08:18:26BillHawkessetmessages: + msg117509
2010-09-27 15:31:52exarkunsetstatus: open -> closed

nosy: + exarkun
messages: + msg117450

resolution: not a bug
2010-09-27 15:30:22BillHawkescreate