Umlaute in def

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
Kimmax
User
Beiträge: 2
Registriert: Sonntag 11. März 2012, 19:40

Hey leutchen
ich bin relativ neu in Python und hab mal ein Problem...
ich bin dabei ein Plugin für einen Siriserver(server, nicht Proxy) zu programmieren, welches auch ganz gut läuft nur halt nicht so wie ich es will...
Hier erstmal ein Ausschnitt:

Code: Alles auswählen

    @register("de-DE", "musik.*leiser")
    def musikleiser(self, speech, language):
        if language == 'de-DE':
            value = self.ask(u"Auf was soll die Lautstärke geändert werden?")
            os.system("amixer set Master \"{0}\" ".format(value))
            self.say(u"Ok, ich habe die Lautstärke für dich auf \"{0}\" gesetzt.".format(value))
funktioniert super, nur das ich gern den Befehl auf "Lautstärke ändern" ändern möchte, ich weiß auch wie, aber der Block muss die Wörter, die beim regestrieren verwendet werden enthalten..sprich:

Code: Alles auswählen

    @register("de-DE", "lautstärke.*ändern")
    def lautstärkeändern(self, speech, language):
        if language == 'de-DE':
            value = self.ask(u"Auf was soll die Lautstärke geändert werden?")
            os.system("amixer set Master \"{0}\" ".format(value))
            self.say(u"Ok, ich habe die Lautstärke für dich auf \"{0}\" gesetzt.".format(value))
ansonsten erkennt Siri den Befehl nicht.
Wenn ich den Code so verwenden möchte, meckert Python wegen dem Umlaut hinter dem def, also wie kann ich das trotzdem realiesieren?
Danköö,
Kim
BlackJack

@Kimmax: Das geht nicht. Buchstaben ausserhalb von ASCII sind in Namen erst in Python 3 erlaubt.
Kimmax
User
Beiträge: 2
Registriert: Sonntag 11. März 2012, 19:40

verdammt :( gibt es vieleicht einen andren weg, um dieses Problem evt. zu lösen?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Du könntest das hier versuchen:

Code: Alles auswählen

def myregister(name, *args, **kwds):
    def wrapper(func):
        func.__name__ = name
        return register(*args, **kwds)(func)

    return wrapper


@myregister("lautstärkeändern", "de-DE", "lautstärke.*ändern")
def lautstaerkeaendern(speech, language):
    if language == 'de-DE':
            value = self.ask(u"Auf was soll die Lautstärke geändert werden?")
            os.system("amixer set Master \"{0}\" ".format(value))
            self.say(u"Ok, ich habe die Lautstärke für dich auf \"{0}\" gesetzt.".format(value))
Mit welchem Modul arbeitest du eigentlich? Am einfachsten wäre es dann sich den Code von ``register`` anzuschauen.

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
pillmuncher
User
Beiträge: 1532
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Oder ganz einfach:

Code: Alles auswählen

class Test(object):
    pass

def methode(self, n):
    print n


setattr(Test, 'äöü', methode)

o = Test()

getattr(o, 'äöü')(5)
Ergebnis:
In specifications, Murphy's Law supersedes Ohm's.
lunar

Diese “Workarounds“ funktionieren allerdings nur, wenn das Modul, welches den Funktionsnamen beziehungsweise das Attribut setzt, und das Modul, das diese dann abfragt, dieselbe Kodierung verwenden. Ist das eine Modul in ISO-8859-1 kodiert, das andere aber in UTF-8, sieht das abfragende Modul Datenmüll, da Funktions- und Attributnamen in Python 2 Bytestrings sind.

Insofern wäre vielleicht erstmal ein Blick in die API-Dokumentation des Programms angesagt, um herauszufinden, ob es nicht eine andere Möglichkeit gibt. Ohne zu wissen, um welches Programm es sich handelt, lässt sich dazu nicht viel mehr sagen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und mal abgesehen davon kann man in Python sowohl Single-Quotes als auch Double-Quotes als Delimiter verwenden, somit muss man keine Double-Quotes escapen, sondern setzt den String in Single-Quotes und kann dann Double-Quotes ganz normal verwenden. Oder aber man verwendet tatsächlich "Gänsefüßchen", wie sie in typografisch korrektem Deutsch genutzt werden. Und ne andere Sache ist dass man auch kein ``os.system`` verwenden sollte sondern das ``subprocess``-Modul. Da brauchst du dann kein String-Formatting mehr, weil man subprocess von Haus aus eine Liste von Argumenten mitgibt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten