MIP Modell in Gurobi

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
blondieatwork
User
Beiträge: 10
Registriert: Donnerstag 29. November 2018, 14:51

Hallo zusammen:)

Ich arbeite gerade die Beispielmodelle von Gurobi durch und bin dabei auf eine Schwierigkeit gestoßen. Im Beispiel mip1.py (http://www.gurobi.com/documentation/8.1 ... p1_py.html) liefern die unteren Zeilen einen Fehler.

Ich gebe diese Zeilen ein:

except GurobiError as e:
print('Error code ' + str(e.errno) + ": " + str(e))

except AttributeError:
print('Encountered an attribute error')

Und bekomme diese Nachricht ausgegeben:

except:GurobiError as e:
^
SyntaxError: invalid syntax

Kann mir da jemand weiterhelfen? Und wozu genau brauche ich diese letzten Zeilen im Code überhaupt?

Vielen Dank im Voraus und liebe Grüße
Kristina
Benutzeravatar
sparrow
User
Beiträge: 4537
Registriert: Freitag 17. April 2009, 10:28

Hallo Kristina,

es wäre super wenn du den Code in Code-Tags packen könntest (das Feld mit dem </> über dem Editor).
Ansonsten sieht die Zeile in der Fehlermeldung nicht wie die aus deinem Quellcode aus. Und da liegt das Problem.
Zuletzt geändert von sparrow am Freitag 4. Januar 2019, 10:35, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

@blondieatwork: bei Deiner Zeile mit SyntaxError ist auch ein `:` zu viel.
Benutzeravatar
sparrow
User
Beiträge: 4537
Registriert: Freitag 17. April 2009, 10:28

try/except wird verwendet um in Python Exceptions (Ausnahmen) abzufangen: https://docs.python.org/3/tutorial/erro ... exceptions
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@blondieatwork: Vergleich doch mal was Du da hinter „Ich gebe diese Zeilen ein“ geschrieben hast, mit dem was Du dann tatsächlich geschrieben hast und wo Du den Syntaxfehler bekommst. Zeichen für Zeichen. Da ist ein recht offensichtlicher Unterschied.

In der Python-Dokumentation ist fast auf jeder Seine oben rechts der Link zum Index. Da findet man dann unter „E“ und mit der Suchfunktion des Webbrowsers recht schnell Einträge zu „except“ & Co. Der Index ist praktisch wenn man nur den Namen eines Schlüsselwortes oder von etwas aus der Standardbibliothek hat, und nicht weiss wo genau in der Dokumentation man das nachlesen kann.

Ausserdem gibt es in der Python-Dokumentation ein Tutorial, das man mal durchgearbeitet haben sollte. Das hat ein ganzes Kapitel über Fehler und Ausnahmen: Errors and Exceptions.

Im vorliegenden Fall braucht man das ``try``/``except``-Konstrukt gar nicht. Das ist IMHO keine sinnvolle Fehlerbehandlung an der Stelle einen kompletten Traceback einfach nur durch eine eigene `print()`-Ausgabe zu ersetzen. Insbesondere die zweite Fehlerbehandlung ist total daneben. Beim `AttributeError` handelt es sich in aller Regel um einen Programmierfehler und den einfach mit ``print('Encountered an attribute error')`` zu ”behandeln” ist wohl so ziemlich das dämlichste was man machen. Möchte wissen was sich der Programmierer *dabei* gedacht hat. Wenn dieser Fall eintritt will man doch wissen welches Attribut und wo im Programmablauf genau da nicht existiert.

Da in Python auch Einrückung eine wichtige Rolle spielt, wäre es gut wenn Du Quelltext und Ausgaben die Quelltext enthalten, hier in den Beiträgen in ein Code-Tag packst. Das ist im vollständigen Editor die Schaltfläche mit der „</>“-Beschriftung. Oder man gibt es manuell ein, also vor dem Quelltext [ code ] und nach dem Quelltext [ /code ] (ohne die Leerzeichen in den eckigen Klammern). Das Ergebnis sieht dann so aus:

Code: Alles auswählen

except GurobiError as e:
    print('Error code ' + str(e.errno) + ": " + str(e))

except AttributeError:
    print('Encountered an attribute error')
Und:

Code: Alles auswählen

  except:GurobiError as e:
         ^
SyntaxError: invalid syntax
Dann sieht man durch die korrekte Ausrichtung des ^ auch besser an welcher Stelle genau der Compiler festgestellt hat, das da etwas nicht den syntaktischen Regeln entspricht. Der Fehler liegt dann irgendwo davor. In diesem Fall sogar sehr nah an dieser markierten Stelle. :-)
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
blondieatwork
User
Beiträge: 10
Registriert: Donnerstag 29. November 2018, 14:51

Vielen Dank für die Heinweise!

Es funktioneirt jetzt auch:)
Antworten