hilfe bei script anpassung, python2 zu python 3

  • hallo,

    ich hatte mir mal für meine sprachsteuerung und openhab ein script gebastelt (wirklich gebastelt, ich kann python nicht wirklich). aktuell versuche ich es anzupassen, kriege allerdings Fehler bei dennen ich vielleicht ne Hilfestellung brauche, da ich durch suchen keine Lösung gefunden habe.

    und zwar geht es aktuell um diese Zeile

    Code
    jsonobject = json.loads(json_response.decode('utf-8','replace'))

    der fehler dazu

    [warnbox]File "C:\Users\pimp1\AppData\Roaming\Kodi\addons\script.voice.control.movie\default.py", line 107, in <module>
    jsonobject = json.loads(json_response.decode('utf-8','replace'))
    'str' object has no attribute 'decode'[/warnbox]

    Vielleicht kann mir jemand helfen. Danke

  • Dein String hat nichts zu decodieren.Versuchs mal ohne decode.
    jsonobject = json.loads(json_response)

    hmmm jetzt bringt er einen anderen error

    [warnbox] jsonobject = json.loads(json_response('utf-8','replace'))'str' object is not callable[/warnbox]

    heisst das das mein Json call nicht geht ?

    Code
    json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "id": "1"}')
  • Wer lesen kann, ist klar im Vorteil ;)

    jsonobject = json.loads(json_response)

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Wer lesen kann, ist klar im Vorteil ;)

    jsonobject = json.loads(json_response)

    jooo da gebe ich dir recht.

    so dann kommt der nächste error.

    [warnbox]EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
    - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
    Error Type: <class 'TypeError'>
    Error Contents: 'in <string>' requires string as left operand, not tuple
    Traceback (most recent call last):
    File "C:\Users\pimp1\AppData\Roaming\Kodi\addons\script.voice.control.movie\default.py", line 120, in <module>
    if(searchstring in Filename.lower()):
    TypeError: 'in <string>' requires string as left operand, not tuple[/warnbox]

    und zeile 120

    Code
    if(searchstring in Filename.lower()):

    das müsste dann so aussehen oder


    Code
    if(Filename.lower() in searchstring):
  • Du hst irgendwo ein Wertepaar, also ein Tuple anstelle eines Strings, also z.B. x = (a,b) <-- das ist ein Tuple, anstelle von x = a. Warum das so ist, kann hier keiner sagen, solange er nicht den kompletten Quelltext hier sieht.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Du hst irgendwo ein Wertepaar, also ein Tuple anstelle eines Strings, also z.B. x = (a,b) <-- das ist ein Tuple, anstelle von x = a. Warum das so ist, kann hier keiner sagen, solange er nicht den kompletten Quelltext hier sieht.

    okay, kann ich gerne posten.


    ich habs, in python3 ist ja utf8 standard, und ich habe da irgendwie das utf überall falsch angewendet. jetzt gehts [ag]

  • Auch das Unicode-Zeugs kannst Du bei Python 3 weglassen:

    • Zeile 16: löschen
    • Zeile 28-29: löschen, stattdessen Zeile 56: searchstring = searchstring.replace('fünf', '5')
    • Zeile 66-76: löschen, dafür wieder in 94 bzw. 100: if searchstring == "zufällige Filme": bzw. if searchstring == "einen zufälligen Film":,
    • die Klammern in den Conditions (if(blabla):) können auch weg.
    • Zeile 80-101: Alle Vorkommen von \" ersetzen durch ", das doppelte Anführungszeichen muss hier nicht geparst werden.
    • Zeile 123 bzw. 127 kann das .encode('blaba') weg.
    • Zeile 1 löschen. Source-Encoding ist immer utf-8

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960

    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Auch das Unicode-Zeugs kannst Du bei Python 3 weglassen:

    • Zeile 16: löschen
    • Zeile 28-29: löschen, stattdessen Zeile 56: searchstring = searchstring.replace('fünf', '5')
    • Zeile 66-76: löschen, dafür wieder in 94 bzw. 100: if searchstring == "zufällige Filme": bzw. if searchstring == "einen zufälligen Film":,
    • die Klammern in den Conditions (if(blabla):) können auch weg.
    • Zeile 80-101: Alle Vorkommen von \" ersetzen durch ", das doppelte Anführungszeichen muss hier nicht geparst werden.
    • Zeile 123 bzw. 127 kann das .encode('blaba') weg.
    • Zeile 1 löschen. Source-Encoding ist immer utf-8

    danke für die ausführliche Fehler Suche [ag] [bd]

  • davon mal abgesehen liesse sich das ganze mit openhab boardmitteln umsetzen -> via alexa ModeController und einer entsprechenden rule die die jsonrpc befehle stattdessen ausführt. da brauchste keinen spagat zu python machen wenn du dort nicht fit bist.

    Und wie?
    Ich hatte mich da mal versucht aber bin gescheitert.
    Das Script durchsucht ja meine Datenbank und gibt mir den best passenden Eintrag zurück und spielt ihn ab.


    Mfg

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!