unsupported operand type(s) for %: 'NoneType' and 'tuple'

Rami Chowdhury rami.chowdhury at gmail.com
Mon Dec 7 11:40:01 EST 2009


On Mon, Dec 7, 2009 at 08:01, Victor Subervi <victorsubervi at gmail.com> wrote:
> On Mon, Dec 7, 2009 at 11:29 AM, Carsten Haese <carsten.haese at gmail.com>
> wrote:
>>
>> Victor Subervi wrote:
>> > I'll do my best to remember to do that from
>> > now on to:
>> >
>> >>>> allTrees = [{'prodCat1': {}, 'prodCat2': {}}, {'presCat1': {},
>> > 'presCat2': {}}]
>> >>>> level = 0
>> >>>> tree = []
>> >>>> for aTree in allTrees:
>> > ...   for name in sorted(aTree.keys()):
>> > ...     tree.append("%s%s" % ("\t" * level, name))
>> > ...     print aTree([name], level + 1)
>> > ...
>> > Traceback (most recent call last):
>> >   File "<stdin>", line 4, in ?
>> > TypeError: 'dict' object is not callable
>> >>>>
>> >
>> > So It would seem I need to either figure a way to coerce the dicts into
>> > being tuples a la:
>> > http://code.activestate.com/recipes/361668/
>> > (which looks like a lot of work) or I need to supply tuples instead of
>> > dicts.
>>
>> No. You need to test the actual code you want to test. The code you
>> typed manually has some very significant differences from the code you
>> first posted. For example, one uses <<printTree(aTree[name], level +
>> 1)>>, and the other uses <<print aTree([name], level + 1)>>. The
>> conclusions you are drawing from this test are meaningless guesses that
>> have nothing to do with solving your actual problem.
>
> Another screw-up. Now that I'm at a computer where I can right click to
> paste the correctly copied code, it executed in the shell just fine. For
> whatever reason, the page itself no longer throws an error, although it's
> still not working properly.
>>
>> > The dicts come from here:
>> >
>> > cursor.execute('select category from categories%s order by Category;' %
>> > (store[0].upper() + store[1:]))
>> > theTree = expand(cursor.fetchall())
>> >
>> > which is the magical code supplied by the lister that does all the heavy
>> > lifting but that I don't understand :-}
>> > Suggestions?
>>
>> Start by understanding the code you're using.
>
> Well, if you could point me in the right direction, it would be appreciated.
> I've tried googling this with no luck. Apparently, "expand" is not a
> well-documented term in python and, of course, it's an often-used term in
> English, which further confuses the issue. Yes, I would like to understand
> this code.

Coming from PHP, I can see why you might be confused. Python is not
PHP -- Python has namespaces and uses them, unlike PHP which IIRC
shoves nearly everything into the default namespace. So you need to
start by figuring out where the 'expand' function came from -- I'm
pretty sure it's not a builtin. Look at the import statements in the
file to see if the function has been specifically imported from
somewhere, or if there's a statement of the form "from [module] import
*". You will then know the module it came from, and be able to either
look at the code or the documentation for that module, which should
tell you more.


--------
Rami Chowdhury
"Never assume malice when stupidity will suffice." -- Hanlon's Razor
408-597-7068 (US) / 07875-841-046 (UK) / 0189-245544 (BD)



More information about the Python-list mailing list