2 svar
460 visningar
wilda är nöjd med hjälpen
wilda 19 – Fd. Medlem
Postad: 15 feb 2017 14:00 Redigerad: 15 feb 2017 14:07

Funktion med felhantering

Hej. Dags att premiärinviga pythondelen på nya pluggakuten!

Jag har problem hur man ska hantera funktioner som innehåller felhantering. tex detta:

Uppgiften är följande: Skapa en funktion user_dialogue() som ber om namn på två filer, och kör er egen funktion encrypt_file (från Uppgift 2) på dessa två filer. Er nya funktion (user_dialogue) skall ha felhantering, och fånga upp om in_file inte existerar, och i sådana fall fråga efter ett nytt filnamn. Se följande exempel:

Name of new encrypted file:out_file.txt
Name of file to be encrypted:blaha.txt
That resulted in an input/output error, please try again! Details:FileNotFoundError(2, 'No such file or directory')
Name of file to be encrypted:namn.csv
Encryption completed!


Notera att felhanteringen skall ske i user_dialogue, trots att själva felet (om filen inte existerar) uppkommer i encrypt_file. Ni skall inte ändra i encrypt_file.

Jag lyckas inte att få in_file att fungera i funktionen encrypt_file(in_file, out_file):  Filen namn.csv ligger i samma mapp som filen med dessa funktioner

def encrypt_file(in_file, out_file):
    fr = open(in_file, "r")
    file_read = fr.read()
    fr.close()
    encrypt_file_read = text_encryption_function.encrypt(file_read)
    fw = open(out_file, "w")
    encrypt_file_copy = fw.write(encrypt_file_read)
    fw.close()
    return encrypt_file_copy


def user_dialogue():
    out_file = (input("Name of new encrypted file: "))
    done = False
    while not done:
        try:
            input_file = open(input("Name of file to be encrypted: "), "r")
        except Exception as error:
            print("That resulted in an input/output error, please try again!", error)
        else:
           encrypt_file(input_file, out_file)
           done = True
        print("Encryption completed!")

Henrik Eriksson 1405 – Fd. Medlem
Postad: 15 feb 2017 15:55

Något else tycker jag inte du ska ha i try-satsen. Så här brukar man skriva.

while True:

    try:

       input_file=open...

        encrypt...

        print...

        break

    except ...

        print...

Du talar inte om på vilket sätt det inte funkar. I def encrypt finns en konstig grej. encrypt_file_copy=fw.write...

fw.write returnerar bara None, ingen kopia.

wilda 19 – Fd. Medlem
Postad: 15 feb 2017 17:07

Det känns rimligt att skippa elsesatsen. Var lägger man den informationen istället?

Här är mina tankar kring koden Bild på kodfönstret

Här blir resultatet (observera på första bilden att namn.csv finns ute till vänster Detta blir resultatet

Svara Avbryt
Close