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)
- ofte uten å bruke funksjoner
- 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.
INGG1001 Programutvikling og feilhåndtering
By sverres
INGG1001 Programutvikling og feilhåndtering
- 593