Hi,
hab gerade erst angefangen mich mit Python zu beschäftigen und bin beim stöbern durch Dokumentationen auf dieses Forum hier gestoßen und hab schon fleißig gelesen.
Hoffe ihr könnt mir helfen.
Also ich hab eine Funktion definiert und in dieser Funktion werden Informationen von Bildern ausgelesen. Das klappt auch soweit alles, nur wenn jetzt statt nem Bild ne TXT geöffnet wird, dann kommt immer ne Fehlermeldung.
Wie mach ich das nun das wenn kein image geöffnet wird, einfach nix passiert, also die Funktion gar nicht ausgeführt wird?
Danke für eure Hilfe.
ND
Neuling braucht Hilfe
Bin zwar auch nur ein Neuling - also meine Tipps mit Vorsicht genießen - aber ich würde da den try benutzen...
also:
also:
Code: Alles auswählen
try:
<code einfügen: ist Datei ein Bild?, vielleicht auf Dateiendung prüfen>
a=0
except:
print "Kein Bild!"
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Bei Fehlern kommt immer eine Exception. Was ist denn diese, wenn du eine TXT Datei öffnest?
Sonst ist Cornys Weg schon sehr gut:
Sonst ist Cornys Weg schon sehr gut:
Code: Alles auswählen
try:
# code einfügen: ist Datei ein Bild?, vielleicht auf Dateiendung prüfen
a=0
except DeineExceptionDieDuBekommst:
print "Kein Bild!"
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hallo,
ich würde die dateien durch eine schleife schicken und jede auf ihre endung überprüfen:
wenn mit try, except, dann den genauen fehlertyp bei except angeben,...
grüße
rolgal
ich würde die dateien durch eine schleife schicken und jede auf ihre endung überprüfen:
Code: Alles auswählen
>>> file_list=['bild1.jpg','text.txt','bild2.jpg']
>>> for item in file_list:
if item.endswith('.jpg'):
print 'ok' # bzw. tu irgendwas, z.b. die funktion ausführen
else:
print 'nicht ok' # bzw. tu irgendwas anderes, oder nichts
ok
nicht ok
ok
>>>
grüße
rolgal
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
In diesem Fall hat EAFP wirklich Vorteile: Wenn du ein ".jpeg" hast, wird es bei rolgals Prüfung durchfallen. Oder auch, wenn man ein JPEG mit falscher Endung hat, dass würde auch abgelehnt werden. Außerdem müsste man jede Dateiendung explizit freigeben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Bin selbst zwar Neuling, aber soweit ich es aus Büchern verstanden habe, sind alle Variablen, die in Funtkionen oder/und Classen verwendet werden, automatisch lokal, während die anderen, die also nicht in Funktionen und dergleichen erstellt/zugewiesen werden, sondern eben im Script allgemein, global.ND hat geschrieben:...
Und dann hätte cih da noch eine andere Frage: DIe Variablen die ich angebe, sind das lokale oder globale Variablen?
...
Wenn eine Funktion dann eine Variable benutzen soll, die lokal nicht vorhanden ist, greift es auf die Globale zurück, falls vorhanden ist.
Aber auf lokaler ebenen kann es die globalen Variablen nur einlesen. Nicht bearbeiten.
Wenn es auch die globalen Variablen verändern soll, also bearbeiten, muß mann im lokalen bereich erst mit dem Befehl 'global' 'XY' den Zugriff erst ermöglichen.
(Hoffe mal, daß ich hier nichts falsches geschrieben habe)
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Schließlich ist die Auswahl ja groß genug.
Danke, das hilft mir schon mal ein bissl weiter, denn so umgeh cih Konflike. Könnt ihr irgend ein gutes Buch empfehlen um Python Programmierung zu lernen?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dies ist aber schlechter Stil und sollte in Python vermieden werden, so kann man es Beispielsweise durch Hapselung in Klassen umgehen.Erwin hat geschrieben:Wenn es auch die globalen Variablen verändern soll, also bearbeiten, muß mann im lokalen bereich erst mit dem Befehl 'global' 'XY' den Zugriff erst ermöglichen.
ND: Es hängt halt ab, was du suchst: wenn du ein Einführtungsbuch suchst, dann sollte es nicht Python Ge-packt sein, denn das ist eine Referenz (so wie Python kurz und gut, die dritte Ausgabe ist grad rausgekommen, die hätte ich recht gerne). Aber guck doch mal in BuchBesprechungen, da sind einige, und im Forum findest du auch einige. Ich habe zwar Einführung in Python, jedoch habe ich es kaum benutzt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ist aber der einzige Stil den ich kenne.Leonidas hat geschrieben:Dies ist aber schlechter Stil und sollte in Python vermieden werden, so kann man es Beispielsweise durch Hapselung in Klassen umgehen.Erwin hat geschrieben:Wenn es auch die globalen Variablen verändern soll, also bearbeiten, muß mann im lokalen bereich erst mit dem Befehl 'global' 'XY' den Zugriff erst ermöglichen.
...
Erkläre mir mal den anderen.
Vor allem würde mich auch die Unterschiede interessieren.
Will ja nicht, daß mein Zeug irgendwann in Konflikt gerät, weil ich schwamige Codezeilen hergenommen habe.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Schließlich ist die Auswahl ja groß genug.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das sieht so in etwa aus:Erwin hat geschrieben:Ist aber der einzige Stil den ich kenne.
Erkläre mir mal den anderen.
Vor allem würde mich auch die Unterschiede interessieren.
Will ja nicht, daß mein Zeug irgendwann in Konflikt gerät, weil ich schwamige Codezeilen hergenommen habe.
Code: Alles auswählen
variable = False
def schlecht():
global variable
variable = True
class Gut(object):
def __init__(self):
self.variable = False
def gut(self):
self.variable = True
g = Gut()
g.gut()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nicht direkt.Anonymous hat geschrieben:Danke, das hilft mir schon mal ein bissl weiter, denn so umgeh cih Konflike. Könnt ihr irgend ein gutes Buch empfehlen um Python Programmierung zu lernen?
Hätte da einen Link zu EDV Buchversand:
http://www.edv-buchversand.de/search.ph ... image.y=13
Aber empfehlen ... das ist so eine Sache.
Jeder empfindet ein Buch auch anders, oder versteht Beispiele ect. unterschiedlich gut.
Achja, beim Buchhändler kann man auch direkt dannach fragen. Normalerweis läßt sich ja alles bestellen, vorrausgesetzt daß es noch zu haben ist. Bei mir sind die Buchändler(innen) immer sehr Hilfsbereit und sagen mir im groeben, was im Buch drinn steht.
@ Leanidas:
Das muß ich erst mal verdauen.
Mag zwar gut sein, aber auch recht ... komplex. Mehr Code.
Hmm... Object?
Also zuerst wird wohl mit g die bewußte Variable geschaffen, die wiederum mit der Zuteilung/Classe 'Gut' als global festgelegt wird? In die Klammern kommt nichts.
Die Variable muß aber dann immer mit '.gut()' angesprochen werden ...?
Und was ist mit dem False, True? bei einem Durchlauf ... wird es dann nicht zuerst False und gleich wieder True?
Was ist eigentlich am einfachen Code so gefährlich? Was kann da passieren?
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Schließlich ist die Auswahl ja groß genug.
schau mal hier unter http://www.cl.uni-heidelberg.de/kurs/ws ... index.html nach, das ist ein toller Python Online Kurs...
Tabellar
Tabellar
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das will ich mal überhört habenErwin hat geschrieben:@ Leanidas:
Du kannst auch '(object)' auslassen, das macht auch einer normalen Klasse eine New-Style-Klasse. Ist hier nicht direkt notwendig, aber wie lautet es so schön: All the cool kids are using 2.4 these days. (New-Style Klassen sind zwar nicht ein 2.4er Feature, aber trotzdem eine ziemlich nette Sache).Erwin hat geschrieben:Das muß ich erst mal verdauen.
Mag zwar gut sein, aber auch recht ... komplex. Mehr Code.
Hmm... Object?
Nein, g ist eine Instanz der Klasse Gut. Zum erstellen der Klasse brauche ich in diesem Fall nichts an den Konstruktor __init__ zu übergeben, deswegen bleiben die Klammern leer.Erwin hat geschrieben:Also zuerst wird wohl mit g die bewußte Variable geschaffen, die wiederum mit der Zuteilung/Classe 'Gut' als global festgelegt wird? In die Klammern kommt nichts.
Nein, die Variable wird dann mit g.variable angesprochen. So kann sich auch modifiziert werden.Erwin hat geschrieben:Die Variable muß aber dann immer mit '.gut()' angesprochen werden ...?
Verstehe die Frage nichtErwin hat geschrieben:Und was ist mit dem False, True? bei einem Durchlauf ... wird es dann nicht zuerst False und gleich wieder True?
Das er extrem unseserlich wird. Sieh mal: du hast eine Funktion. Diese rufst du auf. Diese macht irgendwas, gibt einen Wert zurück und beendet sich. Das ist nachvollziehbar. Was aber nicht nachvollziehbar ist, ist dass diese Funktion so ganz nebenbei noch alle möglichen Variablen ändert, erstellt und so weiter, die sie eigentlich gar nicht angehen sollten.Erwin hat geschrieben:Was ist eigentlich am einfachen Code so gefährlich? Was kann da passieren?
Wenn du lust hast, kannst du dir mal den Artikel zum Thema Wirkung ansehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas hat geschrieben:Das will ich mal überhört habenErwin hat geschrieben:@ Leanidas:
Naja, macht eigentlich nichts. Du hast mich öfters Edwin gennant.
Da habe ich eh noch was gut.
Leonidas hat geschrieben:Verstehe die Frage nichtErwin hat geschrieben:Und was ist mit dem False, True? bei einem Durchlauf ... wird es dann nicht zuerst False und gleich wieder True?
Code: Alles auswählen
class Gut(object):
def __init__(self):
self.variable = False
def gut(self):
self.variable = True
Aber zugleich auch die Variable.
Welche dann bei def gut wieder auf True gesetzt wird?
Nein, da blicke ich (noch?) nicht durch.
Bei Classaufruf ... hm.. ist das eine dann zum löschen gedacht?
Hm.. aber innerhalb einer Funktion kann es eh aber nur die Lokalen Variablen verändern. Die Globalen nur, wenn ich diese innerhalb der Funktion global mache.Leonidas hat geschrieben:Das er extrem unseserlich wird. Sieh mal: du hast eine Funktion. Diese rufst du auf. Diese macht irgendwas, gibt einen Wert zurück und beendet sich. Das ist nachvollziehbar. Was aber nicht nachvollziehbar ist, ist dass diese Funktion so ganz nebenbei noch alle möglichen Variablen ändert, erstellt und so weiter, die sie eigentlich gar nicht angehen sollten.Erwin hat geschrieben:Was ist eigentlich am einfachen Code so gefährlich? Was kann da passieren?
Wenn man gut strukturiert (Namentlich) vor geht, dürfte da nicht viel passieren, denk ich.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Schließlich ist die Auswahl ja groß genug.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wo denn? *g* Ach, die Edit-Funktion ist schon praktischErwin hat geschrieben:
Naja, macht eigentlich nichts. Du hast mich öfters Edwin gennant.
Da habe ich eh noch was gut.
__init__ wird beim Initialisieren der Klasse ausgeführt (siehe Gut()). Dort wird die Klasseninterne Variable variable auf False gesetzt. Die ist nun solange False, bis du gut() aufrufst.Erwin hat geschrieben:Achso? Das init wird auf False gesetzt?Code: Alles auswählen
class Gut(object): def __init__(self): self.variable = False def gut(self): self.variable = True
Aber zugleich auch die Variable.
Welche dann bei def gut wieder auf True gesetzt wird?
Nein, da blicke ich (noch?) nicht durch.
Nein, ich lösche hier nichts. Das überlasse ich dem Garbage Collector.Erwin hat geschrieben:Bei Classaufruf ... hm.. ist das eine dann zum löschen gedacht?
Die Globalen sind eben mit gutem Grund nur lesbar gemacht. Diesen habe ich dir erklärt aber wenn du unbedingt Funktionen mit Nebenwirkungen haben willst, ist das deine Entscheidung.Erwin hat geschrieben:Hm.. aber innerhalb einer Funktion kann es eh aber nur die Lokalen Variablen verändern. Die Globalen nur, wenn ich diese innerhalb der Funktion global mache.
Wenn man gut strukturiert (Namentlich) vor geht, dürfte da nicht viel passieren, denk ich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
@ Leonidas
Da ich offen gestanden Probleme habe, das Sichere Konzept zu verstehen, was ich vom Leichtem nicht behaupten kann, macht es für mich bestimmt nicht viel Sinn das Sichere zu verwenden.
Und da reinarbeiten ... das ist mir zur Zeit ... zu verwirrend. Das dauert.
So lange beim Einfachem nur dann Fehler auftreten können, weil ich versehentlich auf Global zugreifen lass (also mit Namen vertan habe), sehe ich da kein wirkliches Problem.
Da ich offen gestanden Probleme habe, das Sichere Konzept zu verstehen, was ich vom Leichtem nicht behaupten kann, macht es für mich bestimmt nicht viel Sinn das Sichere zu verwenden.
Und da reinarbeiten ... das ist mir zur Zeit ... zu verwirrend. Das dauert.
So lange beim Einfachem nur dann Fehler auftreten können, weil ich versehentlich auf Global zugreifen lass (also mit Namen vertan habe), sehe ich da kein wirkliches Problem.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Schließlich ist die Auswahl ja groß genug.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Klassen musst du so oder so früher oder später lernen, also von dem her..Erwin hat geschrieben:Da ich offen gestanden Probleme habe, das Sichere Konzept zu verstehen, was ich vom Leichtem nicht behaupten kann, macht es für mich bestimmt nicht viel Sinn das Sichere zu verwenden.
Und da reinarbeiten ... das ist mir zur Zeit ... zu verwirrend. Das dauert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Man macht also eine Klasse, die wiederum Variablen abfertigt?
Hört sich für mich umständlich an.
Da warte ich lieber, bis mal wirklich was los ist.
Hört sich für mich umständlich an.
Da warte ich lieber, bis mal wirklich was los ist.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Schließlich ist die Auswahl ja groß genug.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Am besten man schreibt gleich so, dass man globale Variablen vermeidet und fertig.Erwin hat geschrieben:Man macht also eine Klasse, die wiederum Variablen abfertigt?
Hört sich für mich umständlich an.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice