Generators can only yield ints?

Wojtek Walczak gminick at bzt.bzt
Fri Aug 22 19:08:35 EDT 2008


On Fri, 22 Aug 2008 15:44:15 -0700 (PDT), defn noob wrote:
> def letters():
> 	a = xrange(ord('a'), ord('z')+1)
> 	B = xrange(ord('A'), ord('Z')+1)
> 	while True:
> 		yield chr(a)
> 		yield chr(B)
>
>
>>>> l = letters()
>>>> l.next()
>
> Traceback (most recent call last):
>   File "<pyshell#225>", line 1, in <module>
>     l.next()
>   File "<pyshell#223>", line 5, in letters
>     yield chr(a)
> TypeError: an integer is required
>>>>

The error you're seeing is a result of passing
non-integer to chr() function, it has nothing to do
with generators:

>>> chr([])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required
>>>

I have simplified your code a bit:
-------------
import string
def letters():
        a, B = (string.letters,) * 2
        for i in zip(a, B):
                yield i[0]
                yield i[1]

l = letters()

print l.next()
print l.next()
print l.next()
--------------

and the output:

$ python genlet.py
a
a
b
$

Is that what you tried to achieve?

-- 
Regards,
Wojtek Walczak,
http://tosh.pl/gminick/



More information about the Python-list mailing list