Python File einlesen stoppen

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo Forum,
ich wollte ein kleines zusätzliches Demo in wxPython schreiben.

Wenn es als standalone aufgerufen wird, passt das.
(Es wird eine Messagebox ausgegeben und das Programm dann beendet)

Wenn es jedoch innerhalb von Demo aufgerufen wird,
sollte sich das Programm verabschieden, ohne dass es zusätzliche
Fehlermeldungen ausgibt.
Es sollte auch nicht mit sys.exit beendet werden.

(Da ich sonst im Demo die Meldung sehe,
(wo ich vorher eh schon eine Messagebox ausgegeben habe und
deshalb unnötig ist, und wie ein Fehler aussieht))

also:
in der Zeile:

#here I want to stop reading the file at once, so no traceback and no error occurs.

sollte der Python Interpreter veranlasst werden, den Rest des Files
zu ignorieren.

Hat jemand eine Lösung dafür?
Danke im voraus!

Code: Alles auswählen

#!/usr/bin/env python

# Franz Steinhaeusler, 10.05.2006
# TestAutoFind.py Demo Application

import wx

try:
    from wx.lib.mixins.autofind import *
except:
    import sys
    #needed for demo
    appnotrunning = wx.GetApp() is None
    if appnotrunning:
      app = wx.App()
    wx.MessageBox("No module autofind in wx/lib/mixins found.\nPlease copy it to this place!", "Fatal Error")
    if appnotrunning:
      app.MainLoop()
      sys.exit(1)
    else:
      #here I want to stop reading the file at once, so no traceback and no error occurs.
      
      
class ChoiceAutoFind(wx.Choice, AutoFindMixin):
    """ChoiceAutoFind: Demo Class to present the AutoFindMixin class with a wx.Choice."""
    def __init__(self, parent, id=-1, pos=wx.DefaultPosition, 
                 size=wx.DefaultSize, choices=[], style=0, showbuffer=False):
        """Create the ChoiceAutoFind Control."""
        wx.Choice.__init__(self, parent, id, pos, size, choices, style)
        AutoFindMixin.__init__(self, parent, showbuffer)

#...
#...
Zuletzt geändert von Francesco am Mittwoch 10. Mai 2006, 14:13, insgesamt 1-mal geändert.
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

Also in Java würd ich sagen erzeuge eine Exception mittels throw new Exception und das Programm beendet sich an der Stelle sofern kein catch Exception verwendet wird.
Ähnlich ist das ja in Python, im try Teil können Fehler verursacht werden die im except teil abgefangen werden, wie auch in deinem Beispiel zu sehen. Man kann natürlich noch mehr damit anstellen und mehrere except einfügen. Siehe hier
Wie im einzelnen benutzerdefinierte Exceptions in Python erzeugt werden, hab ich auf die schnelle nicht gefunden. In Java würde man dafür ne eigene Exception Klasse schreiben in der dann die einzelnen Arten als Konstruktoren abgebildet sind.


PS: wenn ich mir das nochmal so durchlese, hilft dir das bei deinem Problem glaube ich nicht weiter, aber nix für ungut
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Buell hat geschrieben:Also in Java würd ich sagen erzeuge eine Exception mittels throw new Exception und das Programm beendet sich an der Stelle sofern kein catch Exception verwendet wird.
Das Programm soll nicht abbrechen, sondern dieses eine Modul einfach nicht laden, und auch keine Exceptions mehr liefern, dass hier in diesem Beispiel AutoFindMixin nicht gefunden werden konnte.
Buell hat geschrieben: Ähnlich ist das ja in Python, im try Teil können Fehler verursacht werden die im except teil abgefangen werden, wie auch in deinem Beispiel zu sehen. Man kann natürlich noch mehr damit anstellen und mehrere except einfügen. Siehe hier
Wie im einzelnen benutzerdefinierte Exceptions in Python erzeugt werden, hab ich auf die schnelle nicht gefunden. In Java würde man dafür ne eigene Exception Klasse schreiben in der dann die einzelnen Arten als Konstruktoren abgebildet sind.


PS: wenn ich mir das nochmal so durchlese, hilft dir das bei deinem Problem glaube ich nicht weiter, aber nix für ungut
Ja, nicht wirklich, aber trotzdem danke, das mit dem case (mit exceptions
verwirklicht) war auch interessant zu sehen. :)
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

...hab ich mich auch etwas blöd ausgedrückt, mein Grundgedanke war dein MainLoop() in einen weitern try Block zu packen und wenn das nicht weiter ausgeführt werden soll dann eine exception zu werfen, das sollte den Teil (nicht das ganze Programm) sauber beenden.

Code: Alles auswählen

try:
    #something
except:
    #something
    try:
        #if( ich will nich mehr )throw exception
        app.MainLoop()
    except:
        #something
... aber nur so'n gedanke
Antworten