Russell Warren wrote: > For example, I've got a bit of python 2.3 code that uses > collections.deque.pop(0) in order to pop the leftmost item. In python > 2.4 this is no longer valid - there is no argument on pop (rightmost > only now) and you call .popleft() instead.
the collections module was added in 2.4, so it's not clear what code you're really using under 2.3. but since it's not a standard module, maybe you could add the missing method yourself ? > I would like my code to work in both versions for now and simply want > to add code like: > > if sys.version[:3] == "2.3": > return self.myDeque.pop(0) > else: > return self.myDeque.popleft() > > but am recoiling a bit at the unnecessary conditional in there that I > think will be run on every execution - unless the compiler has some > magic detection of things like sys.version to compile out the > conditional as if it were a preprocessor directive (seems highly > unlikely!)?. > > What is the pythonic thing to do? fork the function/method: if sys.version_info < (2, 4): def myfunc(self): # using deque emulation return self.myDeque.pop(0) else: def myfunc(self): return self.myDeque.popleft() or wrap the non-standard deque class in a compatibility wrapper: if sys.version_info < (2, 4): class mydequeclass(deque): def popleft(self): return self.pop(0) ... return self.myDeque.popleft() </F> -- http://mail.python.org/mailman/listinfo/python-list