Gebruikershulpmiddelen

Site-hulpmiddelen


program:python:validation

Python parameter validatie

Omdat python het toelaat om een variabele als elk gewenst type te definiëren, kan het noodzakelijk zijn om te valideren of een juist type gebruikt is. Het type kan daarbij een standaard python type zijn, maar evengoed een zelf gedefiniëerd type zijn.

Standaard python variabele types
Text Type: str
Numeric Types: int, float, complex
Sequence Types: list, tuple, range
Mapping Type: dict
Set Types: set, frozenset
Boolean Type: bool
Binary Types: bytes, bytearray, memoryview
None Type: NoneType

Let op: In mijn verdere uitleg maak ik vooralsnog alleen gebruik van de types str, int en float!
Voor de andere types, verwijs ik je graag naar W3Schools.

[Programmeren met Python] [sbczob.eu]

Het variabele type zichtbaar maken

Het is mogelijk om het type van de gebruikte variabele te laten zien via de type() funktie. Wanneer je deze funktie gebruikt met de variabele als partameter, zal de funktie ket parameter type terug geven.

syntax: type(object, bases, dict).

  • object: De variable waarvan we het type willen weten
  • bases en dict zijn optioneel, maar als opgegeven, zijn ze beide verplicht!
    Helaas weet ik momenteel niet hoe ze gebruikt moeten worden.
  • Return waarde: Het type van de variabele in leesbare vorm

Voorbeeld:

x = 123
print(x, type(x), sep="\t")
 
f = 1.23
print(f, type(f), sep="\t")
 
s= "123"
print(s, type(s), sep="\t")

Het resultaat is dan:

>>> %Run -c $EDITOR_CONTENT
 123	<class 'int'>
 1.23	<class 'float'>
 123	<class 'str'>
>>> 

Helaas is het met de type() funktie niet mogelijk om via code dit type te checken.

[top] [Programmeren met Python] [sbczob.eu]

Een variabele type controleren

Om een variabele type te controleren, moeten we gebruik maken van de functie isinstance(). Deze functie geeft de waarde “True” terug, wanneer de specifieke variabele gelijk is aan het meegegeven type.

syntax: isinstance(object, type).

  • object: de te controleren variabele
  • type: het python variable type, waarop je wilt controleren
  • Return waarde: True, als het “object” het type, meegegeven in “type” heeft.
    Zoniet, dan is de return waarde False

Nu kun je dus binnen je programma op het te verwachte type controleren:

x = 123
print(x, end="\t")
if isinstance(x,int):
    print("x is een geheel getal (integer)")
elif isinstance(x,float):
    print("x is een gebroken getal (float)")
elif isinstance(x,str):
    print("x is een tekst (str)")
else:
    print("x is wat anders...")
 
f = 1.23
print(f, end="\t")
if isinstance(f,int):
    print("f is een geheel getal (integer)")
elif isinstance(f,float):
    print("f is een gebroken getal (float)")
elif isinstance(f,str):
    print("f is een tekst (str)")
else:
    print("f is wat anders...")
 
s= "123"
print(s, end="\t")
if isinstance(s,int):
    print("s is een geheel getal (integer)")
elif isinstance(s,float):
    print("s is een gebroken getal (float)")
elif isinstance(s,str):
    print("s is een tekst (str)")
else:
    print("s is wat anders...")

Wat nu als output geeft:

>>> %Run -c $EDITOR_CONTENT
 123	x is een geheel getal (integer)
 1.23	f is een gebroken getal (float)
 123	s is een tekst (str)
>>> 

[top] [Programmeren met Python] [sbczob.eu]

Python iets laten "proberen"

Met de bovenstaande functie is het mogelijk om te valideren of een variabele aan een specifiek type voldoet. Maar hoe weet je nu of een “juiste” parameter gebruikt kan worden, maar je niet zeker weet of de variabele inhoud wel goed is.
In dit geval, kun je python het gewoon laten proberen ^_^

Een voorbeeld, de python funktie float(), converteert een tekst welke een getal correct representeert naar een gebroken getal (oftewel een “float”). Als er een ander karakter instaat, behalve een cijfer of eenmalige punt, dan zal de funktie een runtime error geven.
Dit lossen we dus op met het commando try: (oftewel “probeer:”)

De uit te voeren instruktie kan twee mogelijke resultaten hebbe:

  • De geprobeerde instruktie gaat goed, dus geen probleem
  • De geprobeerde instructie kan niet uitgevoerd worden, dus zou een foutmelding geven.

In de tweede situatie hebben we een zogenaamde exceptie, waarvoor we aktie gaan ondernemen. Dit doen we dus met behulp van het commando except:.
Daarnaast kunnen we iets specifieks doen, als de geprobeerde instruktie goed gaat(situatie 1), wat we dooen met het commando else:

Tenslotte kunnen we iets doen, als de probeer instruktie uitgevoerd is, ondanks of het geprobeerde commando al dan niet goed gaat. Dit dommando is finally: en wordt dus altijd uitgevoerd. Ik weet persoonlijk niet wat dit als voordeel heeft ten opzichte van gewoon verder gaan met de oorspronkelijke code.

Een voorbeeld, we gaan een getal invoeren via het toetsenbord en proberen of dit getal omgezet kan worden naar een getal:

x = input("Geef een getal: ")
try:
    x = float(x)
except:
    print("Je hebt geen getal ingegeven!")
else:
    print("Het ingegeven getal is:", x)

Als we dit uitvoeren en we geven een getal in, dan laat het rogramma het getal zien. Mocht er echter geen getal van gemaakt kunnen worden, dan print het programma de door jouw bepaalde foutmelding, maar je kunt uiteraard ook iets anders doen!

>>> %Run -c $EDITOR_CONTENT
 Geef een getal: 25.2
 Het ingegeven getal is: 25.2
>>> %Run -c $EDITOR_CONTENT
Geef een getal: A10
Je hebt geen getal ingegeven!

Hiermee kunnen we echt de touwtjes in handen nemen en ervoor zogen dat een programma idioot bestendig wordt!

[top] [Programmeren met Python] [sbczob.eu]


Idioot bestendig programmeren

We maken hier het programma telop.py uit de sectie “vaardigheden” (De basis van Python) idioot bestendig.

telop_idioot_bestendig.py
#! /usr/bin/env python3
# =========================================
# Programma naam: telop_idioot_bestendig.py
 
'''
Dit programma leest twee getallen, ingegeven via het toetsenbord,
  waarbij een ingave wat geen getal is, niet geaccepteerd wordt.
Na beide getallen opgeslagen te hebben, zal de som van de twee getallen berekend worden.
Uiteindelijk zal het programma de optelling plus uitkomst als uitvoer laten zien.
'''
 
# Leest het eerste getal in, we doen dit via een oneindige lus,
# die alleen eindigt als er een "echt" getal opgegeven wordt.
while True:
    try:
        a = float(input("Geef getal A: "))	# Lees een getal vanaf het toetsenbord.
    except:
        print("Graag een getal opgeven!")	# Het getal is geen juist getal,
        continue							# dus opnieuw ingeven
    else:
        break								# A bevat een getal, verder gaan
 
# Doe nu ditzelfde voor het tweede getal
while True:
    try:
        b = float(input("Geef getal B: "))	# Lees een getal vanaf het toetsenbord.
    except:
        print("Graag een getal opgeven!")	# Het getal is geen juist getal,
        continue							# dus opnieuw ingeven
    else:
        break								# A bevat een getal, verder gaan
 
# Bereken nu de som (optelling) en laat het resultaat zien.
som = a + b
print (a, "+", b, "=", som)
''' Opnerking:
    Het programma is nu idioot bestendig!
    Dat wil zeggen, je kunt alleen correcte getallen ingeven.
'''

[top] [Programmeren met Python] [sbczob.eu]

program/python/validation.txt · Laatst gewijzigd: 2024/01/15 16:08 door sbczobbeheerder