comparison 2.00/compat.py @ 31:fe1463e7e24d

Clean up try-except clauses More try-except-else goodness (with the stress on else). Bug fix: compat.py now creates zip_longest in Python 2.5 instead of raising an exception.
author Oleg Oshmyan <chortos@inbox.lv>
date Thu, 25 Nov 2010 00:03:29 +0000
parents dc4be35d17e0
children 8fec38b0dd6e
comparison
equal deleted inserted replaced
30:f17f19d9eb0a 31:fe1463e7e24d
119 119
120 try: 120 try:
121 # Python 3 121 # Python 3
122 from itertools import zip_longest 122 from itertools import zip_longest
123 except ImportError: 123 except ImportError:
124 # Python 2.6/2.7 124 try:
125 from itertools import izip_longest as zip_longest 125 # Python 2.6/2.7
126 except ImportError: 126 from itertools import izip_longest as zip_longest
127 # Python 2.5 127 except ImportError:
128 from itertools import chain, repeat 128 # Python 2.5
129 # Adapted from the documentation of itertools.izip_longest 129 from itertools import chain, repeat
130 def zip_longest(*args, **kwargs): 130 # Adapted from the documentation of itertools.izip_longest
131 fillvalue = kwargs.get('fillvalue') 131 def zip_longest(*args, **kwargs):
132 def sentinel(counter=([fillvalue]*(len(args)-1)).pop): 132 fillvalue = kwargs.get('fillvalue')
133 yield counter() 133 def sentinel(counter=([fillvalue]*(len(args)-1)).pop):
134 fillers = repeat(fillvalue) 134 yield counter()
135 iters = [chain(it, sentinel(), fillers) for it in args] 135 fillers = repeat(fillvalue)
136 try: 136 iters = [chain(it, sentinel(), fillers) for it in args]
137 for tup in zip(*iters): 137 try:
138 yield tup 138 for tup in zip(*iters):
139 except IndexError: 139 yield tup
140 pass 140 except IndexError:
141 pass
141 142
142 # Automatically import * from this module into testconf.py's 143 # Automatically import * from this module into testconf.py's
143 class CompatBuiltins(object): 144 class CompatBuiltins(object):
144 __slots__ = 'originals' 145 __slots__ = 'originals'
145 def __init__(self): 146 def __init__(self):