SyntaxError... aber wo? [FIXED]

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Hallo...

ich bekomme einen SyntaxError beim Ausfuehren eines Scripts, in dem ich einfach keinen Fehler entdecken kann :(

Die Fehlerausgabe:

Code: Alles auswählen

$$> ./index.py                                 
./index.py: line 24: syntax error near unexpected token `('
./index.py: line 24: `def parse_uri(req):'
Bevor Fragen aufkommen... ich habe lokal weder mod_python noch einen Apache, von daher habe ich die paar noetigen Funktionen des uebergebenen Reqest-Objekts einfach selbst implementiert, falls __name__ == "__main__". Wird das Programm vom Apache (bzw mod_python) ausgefuehrt, ist __name__ = "index".

Hier nun der Code:

Code: Alles auswählen

if __name__ != '__main__':
        from mod_python import apache
        from mod_python import util

else:   
        from sys import argv



HTML = """
<html>
        <head>
                <title>pYtHoN</title>
        </head>
        <body bgcolor="#5A3837" text="white">
                %s
        </body>
</html>
"""

URI_PREFIX = "/~nkoehrin/index.py"


def parse_uri(req):
        cmd = req.unparsed_uri.lstrip(URI_PREFIX)
        if cmd.strip():
                if cmd.startswith('?'):
                        return dict([x.split('=') for x in cmd.lstrip('?').split('&')])
                else:   
                        return cmd
        else:   
                return None


def handler(req):
        cmd = parse_uri(req)

        content = ""

        if cmd:
                if type(cmd) == str: content += "COMMAND IS: "+cmd
                elif type(cmd) == dict:
                        content += "FOLLOWING DATA FETCHED:<br />\n"
                        for key in cmd: content += key+': '+str(cmd[key])

        req.send_http_header()
        req.write(HTML%content)
        return apache.OK


if __name__ == '__main__':
        class Req:
                def __init__(self):
                        self.unparsed_uri = URI_PREFIX
                        if len(argv) > 1: self.unparsed_uri += argv[1]
                
                def send_http_header(self): return 0
                def write(self, s):
                        print s
                        return 0

        class Apache:
                def __init__(self):
                        self.OK = 200
                        self.NOT_FOUND = 404

        global apache
        req = Req()
        apache = Apache()

        handler(req)

PS: Es ist uebrigens nur ein reiner Testcode ohne jegliche nuetzliche Funktion.
Zuletzt geändert von nkoehring am Donnerstag 8. Februar 2007, 00:42, insgesamt 2-mal geändert.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

hi,

Code: Alles auswählen

HTML = """
<html>
        <head>
                <title>pYtHoN</title>
        </head>
        <body bgcolor="#5A3837" text="white">
                %s
        </body>
</html>
""" 
warum weist du dem %s denn keinen Wert zu?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

rafael hat geschrieben:warum weist du dem %s denn keinen Wert zu?
Der Templatestring wird doch aufgelöst - in request(), Zeile 47.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Leonidas hat geschrieben:
rafael hat geschrieben:warum weist du dem %s denn keinen Wert zu?
Der Templatestring wird doch aufgelöst - in request(), Zeile 47.
Achso, hab ich übersehn :oops:
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

@rafael: ich mein, es ist ja eh nur testweise... macht aber auch keinen unterschied, wenn ich es ohne templatestring mache.

@all: aber da ist kein fehler... oder? ich meine... vorallem ein SyntaxFehler muesste doch zu finden sein... oder bin ich einfach nur blind o,O
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ist das alles reiner Text? Kann es nicht sein, das da irgendwelche unsichtbaren Steuerzeichen reingerutscht sind? Das Problem hatte ich auch mal, als ich Code aus einem PDF verwendet habe, dass die Leerzeichen eigentlich gar keine Leerzeichen waren und daher nucht akzeptiert wurden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nkoehring hat geschrieben:

Code: Alles auswählen

if __name__ not '__main__':
Hi nkoehring!

Willkommen im Python-Forum!

Unabhängig von deinem eigentlichen Problem, um das sich ja bereits andere kümmern, möchte ich dich noch auf diesen Fehler aufmerksam machen:

``__name__ not '__main__'`` wird so nicht wirklich funktionieren.

So erfüllt die Zeile ihren Zweck:
``not __name__ == "__main__"``
oder so
``__name__ <> "__main__"``
oder so
``__name__ != "__main__"``...

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

@gerold: hallo und danke :) ich bin allerdings eigentlich schon laenger hier, nur irgendwie ist mein alter Account nicht mehr da oder ich bin einfach zu bloed mir Loginnamen und/oder Passwoerter zu merken ^^

ja und da hast du recht... ist auch schon geaendert ^^

@leonidas: die Vermutung ist ja an sich nicht schlecht, aber leider nicht zutreffend. ich habe die Datei selbst geschrieben und Steuerzeichen wuerde mir der Editor (vim) auch anzeigen.

...gibts vielleicht noch Ideen?

EDIT: Interessanterweise bleibt der Fehler - tausche ich die Positionen der Funktionen - bei der ersten. Heißt also, stelle ich handler() an die Stelle von parse_uri(), liegt der Fehler dann bei "line 24: `def handler(req):' ".

Wenn ich die oberste Funktion in Zeile 23 oder 25 versetze (indem ich die Leerzeilen loesche) verschiebt sich auch die Fehlerangabe auf Zeile 23 bzw 25.

Ich steig da nicht durch :(

2nd EDIT: Ich hab eben mal einfach alles vor der "FehlerFunktion" ausgeschnitten und unter alles andere gesetzt:

Code: Alles auswählen

./index.py: line 1: syntax error near unexpected token `('
./index.py: line 1: `def parse_uri(req):
:?: :?: :?:
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

OH JE... ES IST MIR JA SOOO PEINLICH :oops:

...ich hab einfach den falschen Interpreter benutzt (die erste zeile enthaelt keinen "#!/usr/bin/python"-zeile, da das bei mod_python irgendwie rumsponn.

Naja, danke fuer eure Aufmerksamkeit ^^
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten