Python

Programutvikling og feilhåndtering

Lærebok:

Ch. 12 - Handling Exceptions (t.o.m. 12.3)

Hvis du skriver programvare du skal bruke selv

  • Utviklingsfase - ofte: mye prøving og feiling
  • Bruksfase - de viktigste feilkildene er eliminert, men nye situasjoner kan oppstå

Det viktigste er å sørge for at du selv forstår hva som er årsaken til feilen. Men hvordan gjør du det?

Pythons feilmeldinger er din venn

  • Python har gode mekanismer for å finne ut hva som går galt:
    Exceptions

 

Demo:

https://folk.ntnu.no/sverrsti/INGG1001-H2019/Exceptions.html

Noen av Pythons Exceptions:

 

AttributeError
ImportError
IndexError
KeyError
NameError
TypeError
ValueError
ZeroDivisionError

FileNotFoundError

 

Se forklaring på disse i lærebok, tabell 12.1

Når disse feilsituasjonene oppstår skriver Python ut Exception-navnet med en forklaring

 

Eksempel:

Traceback (most recent call last):
  File "ams4periods.py", line 32, in <module>
    with open('Xmeteringvalues.csv') as f:
FileNotFoundError: [Errno 2] No such file or directory: 
    'Xmeteringvalues.csv'

Hvis du skriver programvare for andre

  • Viktig å gi brukeren gode feilmeldinger
try: 
    with open('meteringvalues.csv') as f:

    	# do stuff with file
    
except FileNotFoundError:
    print("Finner ikke fil: meteringvalues.csv")

Ikke bruk uspesifisert Exception:

(Med mindre du vet akkurat hva du gjør)

try: 
    with open('meteringvalues.csv') as f:

    	# do stuff with file
    
except:
    print("Finner ikke fil: meteringvalues.csv")

Testing for flere mulige Exceptions:

try:

  # diverse matematiske operasjoner
  
except ValueError:
	print('Cannot convert integer')
except IndexError:
	print('List index is out of range')
except ZeroDivisionError:
	print('Division by zero not allowed')

Feiltyper som ikke fanges av Exceptions

  • Syntaksfeil - Python gir beskjed om hvor det er feil
  • Logiske feil - de vanskeligste

Hvordan finne logiske feil?

  • Start enkelt med lite programkode
    • ofte uten å bruke funksjoner
      (de kan vi legge til etter hvert)
  • Skriv ut meldinger med print()
    • print('hei 1') (f.eks. for å sjekke om en betingelse er sann)
    • print('hei 2')
    • print(variabelnavn) (for å sjekk innholdet i en variabel)
    • bruk gjerne tellevariabler og if-setninger for å begrense mengden utskrift til skjermen

Konktrete råd for Oblig 3 del 2

  • Start med kode for å  åpne datafil
    • uten readlines()
  • Fortsett med å lese inn linjene inn i en liste med
    • readlines()
  • Skriv ut første element i lista (linje 1)
    • print(lines[0]) (hvis du bruker variabelen lines for linjene)
  • Skriv ut andre element i lista
    • print(lines[1]
  • Prøv split() på andre linje og se hva du får ut
    • print(lines[1].split()

Med andre ord:

 

Sjekk hele tiden hvordan dataene dine ser ut ut etter at du har gjort operasjoner på dem

 

Deretter - når dataene er på en form du er fornøyd med kan du legge de inn i en datastruktur (f.eks. liste eller dictionary)

 

Sjekk om alle data har kommet inn i datastrukturen ved å undersøke lengden på en liste f.eks.

Python Standard Library har mange metoder som kan brukes for å finne ut noe om verdier i en liste bestående av tall.

 

Se f.eks. dokumentasjonen for

    sum()

    min()

    max()

Se noe av dette i praksis på opptaket fra 23.10.19, for-løkke-eksempel, med data fra Boston Marathon.

 

Opptak

Presentasjon

Jupyter Notebook