On Mon, Dec 7, 2009 at 9:36 AM, Jean-Michel Pichavant < jeanmic...@sequans.com> wrote:
> Victor Subervi wrote: > > On Mon, Dec 7, 2009 at 7:14 AM, Jean-Michel Pichavant < >> jeanmic...@sequans.com <mailto:jeanmic...@sequans.com>> wrote: >> >> Victor Subervi wrote: >> >> >> global printTree = <function printTree>, allTrees = >> [{'prodCat1': {}, 'prodCat2': {}}, {'presCat1': {}, >> 'presCat2': {}}] >> /var/www/html/angrynates.com/cart/catTree.py >> <http://angrynates.com/cart/catTree.py> >> <http://angrynates.com/cart/catTree.py> in >> printTree(allTrees=[{'prodCat1': {}, 'prodCat2': {}}, >> {'presCat1': {}, 'presCat2': {}}], level=0) >> >> 12 for name in sorted(aTree.keys()): >> 13 print '\t' * level, name >> 14 tree.append("%s%s") % ("\t" * level, name) >> 15 printTree(aTree[name], level + 1) >> 16 >> tree = ['%s%s'], tree.append = <built-in method append of list >> object>, level = 0, name = 'prodCat1' >> >> TypeError: unsupported operand type(s) for %: 'NoneType' and >> 'tuple' >> args = ("unsupported operand type(s) for %: 'NoneType' >> and 'tuple'",) >> >> But according to the same error, level = 0 [the NoneType, I >> presume] and name = 'prodCat1', which is most certainly not a >> tuple! Why the error? >> TIA, >> Victor >> >> >> Come on Victor, >> >> Given the error, you can easily see that >> >> tree.append("%s%s") % ("\t" * level, name) >> is involved in the error you get. >> >> The correct thing may be >> tree.append("%s%s" % ("\t" * level, name)) >> >> It should be easy for you to spot. >> FYI, tree.append('%s%s') returns None, then ("\t" * level, name) >> is the tuple applied to None through the % operator. That is why >> you get the above error. >> >> >> You're absolutely right. This code was supplied to me by a lister. Had I >> written it myself, I would have caught it. Reading his code, I didn't. I >> will train myself from now on to write out the code when I come across such >> errors in the future (and re-write my own as well) so that I can spot such >> errors: >> >> >>> level = 0 >> >>> name = 'one' >> >>> tree = [] >> >>> tree.append("%s%s" % ("\t" * level, name)) >> >>> >> >> However, the code threw one of those blasted HTTP 500 errors and the log >> had this terse comment: >> >> [Mon Dec 07 06:01:23 2009] [error] [client 208.84.198.58] Premature end of >> script headers: catTree.py >> >> Thank you. How helpful. Here's the code: >> >> def printTree(allTrees, level=0): >> tree = [] >> for aTree in allTrees: >> for name in sorted(aTree.keys()): >> tree.append("%s%s" % ("\t" * level, name)) >> printTree(aTree[name], level + 1) >> >> The problem must be occurring in the last line which creates a loop since >> printTree is called only once at the very end of the entire script (where it >> is returned to the referrer), but it seems perfectly logical to me. Please >> advise. >> V >> > Is allTrees a dict or a list ? > Did you try to define what could be a allTree value and test your code step > by step in a python shell ? > That's what is missing in your example: an allTrees values for us to > execute your code and check what is going wrong. > That was a great suggestion. 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. 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? TIA, V
-- http://mail.python.org/mailman/listinfo/python-list