On 07/14/2013 03:28 PM, Jim Mooney wrote:
On 13 July 2013 22:25, Dave Angel <da...@davea.name> wrote:

try:
     input = raw_input
except NameError as e:
     pass

try:
     range = xrange
except NameError as e:
     pass

======
Couldn't I just shorten that to:

if int(sys.version[0]) < 3:
     try:
         input = raw_input
         range = xrange
     except NameError as err:
         pass

Since it's the same error in both cases, and I only pass in either case, so
the logic looks the same to me? Or am I missing something?


With enough research, you can justify any of those three approaches. But there's a principle here. Instead of explicitly coding when a particular change happened, and hardwiring the version number, one should test the actual property whenever possible. I'm doing that check with the try/catch. And by having two separate try/catch phrases, we won't be making any assumptions about whether the two changes happened at the same moment in revision history.

It's analogous to duck-typing. Instead of thinking you know which types are acceptable, just check whether the methods you need are all available. If they are, then the type is probably just fine. And in this case, we don't usually need to check it all up front, but can just use the methods as needed.




--
DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to