TypeError: iterable argument required

Peter Otten __peter__ at web.de
Mon Apr 4 10:38:42 EDT 2011


Νικόλαος Κούρας wrote:

>> if "@" in mail and comment not in INVALID_COMMENTS:

> In my original question can you explain to me what the meaning of the
> following error is?
> 
> ********************************************
> mail = None, comment = None
> TypeError: iterable argument required
> args = ('iterable argument required',)
> *********************************************

That's not the standard format for a traceback in Python and you don't 
provide enough context like: 

- your python version
- the framework that produces the non-standard traceback
- a significant portion of your code

That makes it harder than necessary to find out what's going on.

Python 2.4.6 (#2, Jan 21 2010, 23:45:25)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> "@" in None
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: iterable argument required

So "mail = None" means exactly that, you somehow assigned None to the mail 
variable.

Note that newer Python versions give a slightly improved error message:

$ python2.5 -c '"@" in None'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: argument of type 'NoneType' is not iterable

Background: the 'in' operator tries hard to produce a meaningful result 
before it gives up:

>>> class A:
...     def __getattr__(self, name):
...             print name
...             raise AttributeError
...
>>> 42 in A()
__contains__
__iter__
__getitem__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'instance' is not iterable




More information about the Python-list mailing list