zu meiner Verteidigung: ich hab bewusst nicht OOP programmiert und eine Frage habe ich noch: Ich hätte gern noch einen normalen exception für einen IOError eingebaut, also im Falle der Pfad oder Dateiname ist falsch. Doch leider ließ sich dies nicht mit dem finally Block arrangieren? Habt ihr Tipps wie ich das machen könnte?
Das stimmt. Bei Python-Versionen vor 2.5 geht das nicht. Ab Python 2.5 geht dies jedenfalls wunderbar.
Du könntest das aber auch mit einer Verschachtelten Lösung machen.
Des weiteren.. warum Pfad und Dateiname einzeln abfragen? --> Wenn ich beides weiß, darf ich doch auch beides anwenden oder?
Des weiteren gibt es ein Problem mit deinem Code, wenn ich folgende Werte eintrage:
Code: Alles auswählen
>> Geben Sie den Pfad an: /home/ente/Desktkop
>> Dateinamen: hilfe.txt
Dann versuchst du den Pfad
" /home/ente/Desktophilfe.txt " zu öffnen, welchen es natürlich nicht gibt.
Um das zu vermeiden könntest du das 'os' Modul benutzen:
Code: Alles auswählen
import os
path = raw_input('Geben sie einen Pfad an: ') # Benutzer-Eingabe
filetext = raw_input('Dateinamen') # Benutzer-Eingabe
def stuff(path, datei): # Funktion stuff
try:
datei = os.path.join(path, datei)
in_file = open(datei, 'r') # Datei öffnen und lesen
text = in_file.read()
print text # Inhalt ausgeben
finally:
in_file.close() # Datei immer schließen
print '- close file -'
stuff(path,filetext)
os.path.join(path, datei)
"vereinigt" sozusagen die beiden, sodass sie den Korrekten Pfad "/home/ente/Desktop/hilfe.txt" ergeben.
Die engültige Lösung könnte z.B. folgende Sein:
Code: Alles auswählen
import os
pfad = raw_input('Geben sie einen Pfad an: ') # Benutzer-Eingabe
if not os.path.isfile(path):
dateiname = raw_input('Dateinamen: ') # Benutzereingabe NUR, wenn vorheriges KEINE Datei war
def stuff(path, datei): # Funktion stuff
try:
try:
if dateiname:
# wurde 'dateiname' angegeben?
datei = os.path.join(path, datei)
else:
# pfad war schon der Pfad zur Datei
datei = pfad
in_file = open(datei, 'r') # Datei öffnen und lesen
text = in_file.read()
print text # Inhalt ausgeben
except IOError, err:
print 'Fehler beim lesen der Datei "%s"' % err.filename
finally:
in_file.close() # Datei immer schließen
print '- close file -'
stuff(path,filetext)
Die Lösung ist meines Wissens nach die einzige, die 'try, except, finally' Lösung von Python2.5 "nachzustellen".
Ich habe auch gleich noch ein paar Sachen eingefügt, damit du siehst, was so alles möglich ist.
Des weiteren.... so wie ich das sehe, bist du noch nicht lange dabei?
Wenn dem so sein sollte würde ich mich nicht gleich auf OOP stürzen und erstmal die Grundlagen etc. erlernen. OOP ist noch spannend genug
Ich hoffe, ich konnte dir weiterhelfen!
MfG EnTeQuAk