Experimente zur Fehlerbehandlung
Datei nicht gefunden
Betrachte noch einmal das folgende Programm zum Verschlüsseln von Texten.
def verschluesselterText(text, schluessel):
"""
>>> verschluesselterText('HALLO', 4)
'LEPPS'
>>> verschluesselterText('ABC', 0)
'ABC'
>>> verschluesselterText('XYZ', 2)
'ZAB'
>>> verschluesselterText('ABC', 26)
'ABC'
"""
geheimtext = ''
for zeichen in text:
zahl = ord(zeichen)
neuezahl = zahl + schluessel
if neuezahl > ord('Z'):
neuezahl = neuezahl - 26
neuesZeichen = chr(neuezahl)
geheimtext = geheimtext + neuesZeichen
return geheimtext
def vereinfachterText(text):
"""
>>> vereinfachterText('Hallo')
'HALLO'
>>> vereinfachterText('Süß oder sauer?')
'SUESSODERSAUER'
"""
textNeu = ''
for zeichen in text:
if ord(zeichen) >= ord('A') and ord(zeichen) <= ord('Z'):
# zeichen ist ein Großbuchstabe
textNeu = textNeu + zeichen
elif ord(zeichen) >= ord('a') and ord(zeichen) <= ord('z'):
# zeichen ist ein Kleinbuchstabe
neuesZeichen = chr(ord(zeichen)-32)
textNeu = textNeu + neuesZeichen
elif zeichen == 'Ä' or zeichen == 'ä':
textNeu = textNeu + 'AE'
elif zeichen == 'Ö' or zeichen == 'ö':
textNeu = textNeu + 'OE'
elif zeichen == 'Ü' or zeichen == 'ü':
textNeu = textNeu + 'UE'
elif zeichen == 'ß':
textNeu = textNeu + 'SS'
return textNeu
def geladenerText(dateiname):
datei = open(dateiname, 'r', encoding='iso-8859-1')
text = datei.read()
datei.close()
return text
def textSpeichern(dateiname, text):
datei = open(dateiname, 'w', encoding='iso-8859-1')
datei.write(text)
datei.close()
# Testfälle überprüfen
if __name__ == "__main__":
from doctest import testmod
testmod()
# Funktionen benutzen
aktuellerText = geladenerText('text_wikipedia_caesar.txt')
vereinfachterAktuellerText = vereinfachterText(aktuellerText)
verschluesselterAktuellerText = verschluesselterText(vereinfachterAktuellerText, 3)
textSpeichern('text_wikipedia_caesar_verschluesselt.txt', verschluesselterAktuellerText)
Wenn die angegebene Datei nicht vorhanden ist, gibt es eine Fehlermeldung.
>>>
Traceback (most recent call last):
File ".../laden_und_speichern1.py", line 69, in <module>
aktuellerText = geladenerText('text_wikipedia_caesar.txt')
File ".../laden_und_speichern1.py", line 53, in geladenerText
datei = open(dateiname, 'r', encoding='iso-8859-1')
FileNotFoundError: [Errno 2] No such file or directory: 'text_wikipedia_caesar.txt'
</module>
Einen solchen Laufzeitfehler kann man vermeiden, wenn man eine Fehlerbehandlung vorsieht.
... wie oben ...
# Funktionen benutzen
try:
aktuellerText = geladenerText('text_wikipedia_caesar.txt')
vereinfachterAktuellerText = vereinfachterText(aktuellerText)
verschluesselterAktuellerText = verschluesselterText(vereinfachterAktuellerText, 3)
textSpeichern('text_wikipedia_caesar_verschluesselt.txt', verschluesselterAktuellerText)
except:
print('zu verarbeitende Datei nicht gefunden')
Aufgabe 1
(a) Teste die Version mit Fehlerbehandlung.
(b) Der Benutzer soll den Namen der Datei selbst eingeben können. Ändere das Programm entsprechend ab. Warum ist es gerade dann sinnvoll, eine Fehlerbehandlung vorzusehen?