[Checkins] SVN: z3c.pt/trunk/src/z3c/pt/ Raise friendly exception if we're repeating over a non-iterable.
Malthe Borch
mborch at gmail.com
Tue Aug 12 19:04:35 EDT 2008
Log message for revision 89761:
Raise friendly exception if we're repeating over a non-iterable.
Changed:
U z3c.pt/trunk/src/z3c/pt/clauses.py
U z3c.pt/trunk/src/z3c/pt/utils.py
-=-
Modified: z3c.pt/trunk/src/z3c/pt/clauses.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/clauses.py 2008-08-12 22:48:42 UTC (rev 89760)
+++ z3c.pt/trunk/src/z3c/pt/clauses.py 2008-08-12 23:04:35 UTC (rev 89761)
@@ -603,6 +603,17 @@
>>> _repeat.end(stream)
>>> exec stream.getvalue()
+ A repeat over a non-iterable raises an exception.
+
+ >>> stream = CodeIO()
+ >>> _repeat = Repeat("j", pyexp("None"))
+ >>> _repeat.begin(stream)
+ >>> _repeat.end(stream)
+ >>> exec stream.getvalue()
+ Traceback (most recent call last):
+ ...
+ TypeError: Can only repeat over an iterable object (None).
+
Simple for loop:
>>> stream = CodeIO()
Modified: z3c.pt/trunk/src/z3c/pt/utils.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/utils.py 2008-08-12 22:48:42 UTC (rev 89760)
+++ z3c.pt/trunk/src/z3c/pt/utils.py 2008-08-12 23:04:35 UTC (rev 89761)
@@ -87,8 +87,17 @@
class repeatdict(dict):
def insert(self, key, iterable):
- length = len(iterable)
- iterator = iterable.__iter__()
+ try:
+ length = len(iterable)
+ except TypeError:
+ length = None
+
+ try:
+ iterator = iterable.__iter__()
+ except AttributeError:
+ raise TypeError(
+ "Can only repeat over an iterable object (%s)." % iterable)
+
self[key] = (iterator, length)
return iterator
More information about the Checkins
mailing list