Hilfe in python benötigt

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Hilfe in python benötigt

      Hallo zusammen,
      ich habe ein script zusammengebastelt und nfo-dateien aus kodi auszulesen.
      das funktioniert auch soweit prima, nur wenn mal eine der abgefragten infos nicht vorhanden ist gibt es einen fehler und das script bircht ab.

      hier das script
      Spoiler anzeigen


      #!/usr/bin/python
      # coding: utf-8
      import io, os, sys
      import xml.etree.ElementTree as ElementTree


      for filename in sys.argv[1:]:
      if os.path.exists(filename):
      doc = ElementTree.parse(filename)


      title = doc.find('title').text or "Kein Titel"
      year = doc.find('year').text or "Jahr ?"
      plot = doc.find('plot').text or "Keine Inhaltsangabe"
      votes = doc.find('ratings/rating/votes').text or "-"
      director = doc.find('director').text or "?"


      runtime = doc.find('runtime').text or "X"
      if runtime == "0": runtime = "X"


      rating = doc.find('ratings/rating/value').text
      if rating is None: votes = "-"
      if rating is None: rating = "-.-"


      country = doc.find('country').text or "Land ?"
      if country == "United Kingdom": country = "GB"
      if country == "France": country = "Frankreich"
      if country == "Australia": country = "Australien"
      if country == "Belgium": country = "Belgien"
      if country == "Germany": country = "Deutschland"
      if country == "United States of America": country = "USA"
      if country == "Netherlands": country = "Niederlande"
      if country == "Sweden": country = "Schweden"
      if country == "Canada": country = "Kanada"
      if country == "Colombia": country = "Kolumbien"
      if country == "Spain": country = "Spanien"
      if country == "Argentina": country = "Argentinien"
      if country == "Italy": country = "Italien"
      if country == "Cuba": country = "Kuba"
      if country == "Denmark": country = "D nemark"
      if country == "Czech Republic": country = "Tscheschien"
      if country == "New Zealand": country = "Neuseeland"
      if country == "Russia": country = "Russland"
      if country == "Iceland": country = "Island"


      names = [n.text or "?" for n in doc.findall('actor/name')]
      genre = [g.text or "Genre ?" for g in doc.findall('genre')]


      items = [ title, country + ' ' + year + ' (R/V: ' + rating[:3] + '/ ' + votes + ')', runtime + ' min, ' + ', '.join(genre), plot, 'Regie: ' + director, 'Darsteller: ' + ', '.join(names)]


      basename = os.path.splitext(filename)[0]


      with io.open(basename + '.txt', 'w', encoding='utf-8') as fh:
      fh.write(u'\n\n'.join(items))


      hier die fehlermeldung
      Spoiler anzeigen

      # ./xmbc2emc.sh
      Traceback (most recent call last):
      File "xml2txt.py", line 23, in <module>
      country = doc.find('country').text or "Land ?"
      AttributeError: 'NoneType' object has no attribute 'text'


      in der regel sind alle abgefragten infos in den .nfo dateien vorhanden und alles rennt durch. wie bekommen ich das script dazu eine 'leere' Abfrage zu ignorieren, oder besser noch mit "no info" zu füllen ?
      Gruß wsxws
    • >>AttributeError: 'NoneType' object has no attribute 'text'

      schöner ist ein
      If xyz==None Then

      damit kannst dann reagieren

      der Rundumschlag mit try-exept funktioniert zwar sehr bequem, jedoch hast du dann keine Möglichkeit mehr andere Fehler zu erkennen und zu reagieren
      ============================================================================================
    • an der Stelle, wo deine Variable 'None' liefert, bevor sie ausgewertet wird
      die Fehlermeldung besagt ja, das die auszuwertende Variable gar nicht gefüllt ist, sie ist 'None' (also nix) und kann nicht behandelt werden

      ich gebe gern Hilfe zur Selbsthilfe, proggen werd ich dir das nicht (da lernst nicht viel) ;_)
      ============================================================================================
    • ich habe
      votes = doc.find('ratings/rating/votes').text or "-"
      if votes is None: votes = "-"

      und bekomme trotzdem
      Traceback (most recent call last):
      File "xml2txt.py", line 13, in <module>
      votes = doc.find('ratings/rating/votes').text or "-"
      AttributeError: 'NoneType' object has no attribute 'text'

      wie muss denn das aussehen, damit es funzt ?
      Gruß wsxws
    • @shadowrider, sehe ich komplett anders. Erstens ist try except die Standard Vorgehensweise in Python, zweitens hast du manchmal keine andere Chance, drittens kannst du doch explizit den NoneType behandeln, viertens baut man try except ja nach Möglichkeit eng um die Stelle, die die Exception werfen könnte, fünftens hat es ja einen Grund, dass Python hier im Gegensatz zu vielen anderen Programmiersprachen Exceptions erzeugt, sechsten hast du hier die Chance, deinen Code auch entsprechend zu strukturieren, so dass er lesbarer bleibt, und einen Standardpfad vorgeben, den dein Code durchlaufen soll.

      Manchmal ist "if" klarer, hier würde ich definitiv zu try except greifen. (Und wie du sicher weist, gibt es in Python kein "Then" :P - aber genug klug geschissen.)

      @wsxws etwa so

      Python-Quellcode

      1. try:
      2. votes = doc.find("...").text
      3. except NoneType:
      4. votes = "leer"
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von rdamas ()

    • nochmal, ich programmier es dir nicht :D

      >>AttributeError: 'NoneType' object has no attribute 'text'
      du kannst kein Attribute .text or blabla aufrufen von einer nicht existierenden Variable
      wenn du danach prüfst ist es ja schon zu spät

      edit:



      gibt es in Python kein "Then"

      ja sorry, then... ich war grad inner anderen Sprache zugangen
      muss natürlich
      if..
      else...
      heißen

      natürlich macht try/except wieder Sinn, wenn man es unterschiedlich je ausgeworfenem Fehler händelt - womit man diesen aber genauso wieder beschreiben muss
      ============================================================================================

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von shadowrider ()

    • ich habe jetzt weiß der geier nicht wie lange bereits an dem zeug hier gehangen und ich weiß nicht wievlie verschieden versuche gemacht und bekomme es auc mit google nicht zum laufen, darum habe ich hier gefragt.

      bei euren beien vorschlägen komme ich auf das hier:

      SyntaxError: invalid syntax
      File "xml2txt.py", line 16
      if votes==None votes = "no info"


      SyntaxError: invalid syntax
      File "xml2txt.py", line 14
      except NoneType:

      hat vielleicht doch jemand erbarmen und einen funktionieren codeschnipsel für mich ?
      Gruß wsxws

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von wsxws ()

    • bei euren beien vorschlägen komme ich auf das hier:
      du hast dir nicht angesehen, was ich gerade erklärt habe

      du kannst kein Attribute .text or blabla aufrufen von einer nicht existierenden Variable
      wenn du danach prüfst ist es ja schon zu spät
      genau das machst du aber und deswegen der Fehler

      übersetzt machst du:
      votes = None.text or "-"
      ============================================================================================
    • Häng das Ding hier bitte mal an, bei Copy&Paste gehen die Einrückungen verloren. Wegen der Syntaxfehler schau ich mir das gerne an, aber ich programmiere dir das auch nicht fertig :D - dafür bist du in der Bastelstube.
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.
    • votes = doc.find('ratings/rating/votes').text or "-" das hab ich doch da stehen

      irgendwie versteh eich nur noch bahnhof.

      ich mlchte doch auch garnicht fertig programmiert haben sondern lediglich einen hinweis, wie ich in meinem ansonsten fertigen script diesen fehler verhindern kann ....

      so siehts richtig aus: [Python] #!/usr/bin/python # coding: utf-8 import io, os, sys import xml.etree.Element - Pastebin.com
      Gruß wsxws

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von wsxws ()

    • votes = doc.find('ratings/rating/votes').text or "-" das hab ich doch da stehen

      ja - und doc ist ja irgendwas, oder?
      und doc.find('ratings/rating/votes') sollte auch was sein


      wenn aber alles nichts ist (None!) dann kann mit nichts auch nicht ".text" gemacht werden, um es versuchsweise mal platt zu formulieren
      ============================================================================================
    • mit dem try: habe ich jetzt nen anderen fehler


      File "xml2txt.py", line 15, in <module>
      except NoneType:
      NameError: name 'NoneType' is not defined

      und wie bekomme ich das jetzt weg ?
      Gruß wsxws
    • es funzt mit @rdamas 's try and except, nur nicht mit NoneType sondern mit AttributeError

      @schomi du bist ja ganz schön ungeduldig für dein alter. ich war nämlich ebend essen ;)
      btw, deine hinweise habe ich genau garnicht verstanden. ich habe diverse if-syntaxe getestet und hat nix funktioniert. es mag ja sein, dass dein weg eventuell besser ist, hilft mir aber nicht, wenn ich den nicht verstehe, weil du den zu cryptisch (für mich) beschreibst.
      Gruß wsxws

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von wsxws ()

    • Denke schon; was auch noch ginge:


      votes = doc.find("ratings/rating/votes") and doc.find("ratings/rating/votes").text or "-"


      Finde ich aber nicht mehr lesbar, und bin mir nicht sicher, ob der Ausdruck doppelt ausgewertet wird.


      Geht glaube ich doch nicht.
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von rdamas ()