Funktion hängt "None" hinter den Output

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Vortec
User
Beiträge: 52
Registriert: Dienstag 10. Dezember 2002, 11:54

Hallo,

ich habe ein kleines Problem und bin absolut ratlos.
Mein Projekt beinhaltet (unter anderem) folgendes:

Sprachtemplates (string) mit Variablen:

Code: Alles auswählen

__INVALID_VALUE__ = "Invalid value: <VARIABLE> = '<VALUE>'"
Eine Funktion, die diese Variablen mit Werten ersetzt:

Code: Alles auswählen

def parse_template(self, text, variables, values):
        """ Replaces the intern variables of VScan (like: <HOST>) with
            values. Supposed to parse the language object.

            Parameters:
              text              - (string) The string which contains the
                                  variables.
              variables         - (array) The variables without patterns.
              values            - (array) Elements of this list will be
                                  replaced with variables[] in order.

            Example:
              >>> print self.parse_template("The <OBJECT> is <COLOR>.", ['OBJECT', 'COLOR'], ['devil', 'red'])
              The devil is red.
        """
            
        if len(variables) != len(values):
            self.err(self.language.__NOT_SAME_SIZE__)
        for i in range(0, len(variables)):
            pattern = self.config.pattern % (variables[i])
            if pattern in text and values[i] != None:
                text = replace(text, pattern, str(values[i]))
        return text
Eine Funktion, die bei aktiviertem Debug Modus (ebenfalls eine Variable in meinem Projekt) einen Text ausgibt:

Code: Alles auswählen

def err(self, text):
        if self.config.debug_mode == 1: print text
parse_templates() funktioniert problemlos, aber ich dachte vielleicht liegt darin das Problem und habe den Code vorsichtshalber gepostet.
Also: Diese 3 Dinge zusammen wollen einfach nicht harmonieren. Er gibt den geparsten Text zwar aus, hängt aber immer ein "None" dahinter!
text
None
Wenn ich print text zu print "'" + text + "'" ändern würde, käme folgendes heraus:
'text'
None
Ich bin absolut verzweifelt und hoffe dass mir hier jemand helfen kann.

Edit: Ach so, vielleicht noch ein Aufruf:

Code: Alles auswählen

self.err(self.parse_template(self.language.__INVALID_VALUE__, ['VARIABLE', 'VALUE'], ['protocol', self.config.protocol]))
gibt
Invalid value: protocol = 'tcdp'
None
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Vortec,

hab mal aus Deinen Codeschnipseln ein funktionierendes Beispiel gemacht, wo bei Dir der Fehler liegt, weiss ich aber auch nicht

Code: Alles auswählen

class tplparser:
    pattern = "<%s>"
    def parse_template(self, text, variables, values):
        """ Replaces the intern variables of VScan (like: <HOST>) with
            values. Supposed to parse the language object.

            Parameters:
              text              - (string) The string which contains the
                                  variables.
              variables         - (array) The variables without patterns.
              values            - (array) Elements of this list will be
                                  replaced with variables[] in order.

            Example:
              >>> print self.parse_template("The <OBJECT> is <COLOR>.", ['OBJECT', 'COLOR'], ['devil', 'red'])
              The devil is red.
        """
           
        if len(variables) != len(values):
            self.err("Unterschiedliche Anzahl Variable und Werte!")
        for i in range(0, len(variables)):
            pattern = self.pattern % (variables[i])
            if pattern in text and values[i] != None:
                text = text.replace(pattern, str(values[i]))
        return text
    
    def err(self, text):
        if self.config.debug_mode == 1: print text

if __name__ == "__main__":
    tplp = tplparser()
    print tplp.parse_template("The <OBJECT> is <COLOR>.", ['OBJECT', 'COLOR'], ['devil', 'red'])
Gruß

Dookie
Vortec
User
Beiträge: 52
Registriert: Dienstag 10. Dezember 2002, 11:54

Sonst noch jemand eine Idee?
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Vortec hat geschrieben:Sonst noch jemand eine Idee?
Nein, sorry. Und soweit ich das überblicken kann funktioniert Dookies Code auch. Der Fehler wird also vermutlich an anderer Stelle in Deinem Code liegen. Da das "None" bei Dir eine Zeile tiefer ausgegeben wird vermute ich mal, dass Du irgendwo noch einen weiteren Print Befehl hast.
Antworten