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.
Vortec
User
Beiträge: 52
Registriert: Dienstag 10. Dezember 2002, 11:54

Funktion hängt "None" hinter den Output

Beitragvon Vortec » Samstag 15. Mai 2004, 10:39

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Samstag 15. Mai 2004, 11:40

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

Beitragvon Vortec » Montag 17. Mai 2004, 15:08

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

Beitragvon Christopy » Montag 17. Mai 2004, 15:28

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.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]