#26600: map says a queryset is not iterable
-------------------------------------+-------------------------------------
Reporter: ihucos | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 1.11
(models, ORM) |
Severity: Normal | Resolution: needsinfo
Keywords: queryset iterator | Triage Stage:
map | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Vitaliy):
* version: 1.8 => 1.11
Comment:
I found a way to reproduce the error.
Class **A** is a simplified version of **QuerySet**
{{{#!python
class A(object):
def __init__(self):
self._result_cache = None
def _fetch_all(self):
if self._result_cache is None:
self._result_cache = list(self.iterator())
def iterator(self):
for x in range(10):
if x == 5:
raise MemoryError # the type of exception doesn't matter
yield x
def __iter__(self):
self._fetch_all()
return iter(self._result_cache)
}}}
{{{#!python
In [2]: map(str, A())
---------------------------------------------------------------------------
TypeError Traceback (most recent call
last)
/home/user/workspace/project/service/models.pyc in <module>()
----> 1 map(str, A())
TypeError: argument 2 to map() must support iteration
}}}
When using python 3:
{{{#!python
In [6]: map(str, A())
---------------------------------------------------------------------------
MemoryError Traceback (most recent call
last)
<ipython-input-6-aad9944017be> in <module>()
----> 1 map(str, A())
<ipython-input-5-4a8af6429c4d> in __iter__(self)
15
16 def __iter__(self):
---> 17 self._fetch_all()
18 return iter(self._result_cache)
19
<ipython-input-5-4a8af6429c4d> in _fetch_all(self)
6 def _fetch_all(self):
7 if self._result_cache is None:
----> 8 self._result_cache = list(self.iterator())
9
10 def iterator(self):
<ipython-input-5-4a8af6429c4d> in iterator(self)
11 for x in range(10):
12 if x == 5:
---> 13 raise MemoryError
14 yield x
15
MemoryError:
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/26600#comment:6>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/064.7f0fbc340bd6ebe5bc4d74ad45b35961%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.