Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

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?

X

Fehler melden

X

Suche