2012-06-10 2 views
0

J'ai écrit un tas de fonctions d'aide pour envelopper des fonctions communes telles que l'insertion et la sélection. Inclus ci-dessous est juste un de ces emballages ... dont je n'arrive pas à comprendre pourquoi cela ne fonctionne pas.L'enveloppe Python empêche l'appel de la fonction?

Je soupçonne que c'est quelque chose à voir avec l'emballage:

from collections import Mapping 
import sqlite3 

def counter(func): 
    def wrapper(*args, **kwargs): 
     wrapper.count = wrapper.count + 1 
    wrapper.count = 0 
    return wrapper 

@counter 
def insert(val, cursor, table="reuters_word_list", logfile="queries.log"): 
    if val: 
     if isinstance(val, (basestring, Mapping)): 
      val='\"'+val+'\"' 
     query = ("insert into %s values (?);" % 'tablename', val) 
     if logfile: 
      to_logfile(query + '\n', logfile) 
     cursor.execute(query) 

if __name__ == '__main__': 
    connection = sqlite3.connect('andthensome.db') 
    cursor = connection.cursor() 
    cursor.execute("create table wordlist (word text);") 
    insert("foo", cursor) 
    connection.commit() 
    cursor.execute("select * from wordlist;") 
    print cursor.fetchall() 
    cursor.close() 

Répondre

6

Votre compteur décorateur jamais fait appels fonct.

Essayez

def counter(func): 
    def wrapper(*args, **kwargs): 
     wrapper.count += 1 
     return func(*args, **kwargs)  # <- this line is important!! 
    wrapper.count = 0 
    return wrapper 
+0

Merci, exactement ce que je voulais :). Acceptera en 10 minutes [quand cela me permet de!] – user1438003

Questions connexes