ID.nl logo
Zo kun je programmeren in Python - Deel 5
© Reshift Digital
Zekerheid & gemak

Zo kun je programmeren in Python - Deel 5

In de href="https://computertotaal.nl/artikelen/pc/zo-kun-je-programmeren-in-python-deel-4/" rel="noopener noreferrer" target="_blank">vorige les</a> toonden we allerlei manieren om de uitvoer van tekst op het scherm aan te passen. In deze les zetten we de stap van je scherm naar bestanden: we gaan gegevens uit bestanden lezen en naar bestanden schrijven. Daarnaast leer je reageren op exceptions: foutmeldingen die Python je geeft als er iets misgaat.

Twee lessen geleden gebruikte je de functie input om wat de gebruiker op zijn toetsenbord intypt te registreren. En in de vorige les toonden we je hoe je met de functie print uitvoer op het scherm toont. Maar in- en uitvoer kan ook via bestanden verlopen. Laten we eens kijken hoe dat gaat.

Hier kun je les vier bekijken.

We beperken ons in deze les tot het lezen en schrijven van tekstbestanden. Je kunt ook met binaire bestanden werken, die willekeurige data in een andere vorm dan tekst kunnen bevatten, maar dat is wat meer werk omdat je de data nog moet interpreteren. Voor de rest werkt dit hetzelfde.

Een tekstbestand lezen

We tonen hier in een voorbeeld hoe je op een Linux-machine zoals een Raspberry Pi met Raspberry Pi OS (tot voor kort Raspbian geheten) het bestand met de lijst van gebruikers uitleest. Ook op macOS werkt dit voorbeeld. Gebruik je Windows, maak dan zelf een bestand aan met de inhoud die we in ons voorbeeld tonen en pas de locatie van het te openen bestand aan in je Python-code.

De eenvoudigste manier om een volledig tekstbestand uit te lezen en op het scherm te tonen, heeft maar twee regels nodig:

with open('/etc/passwd', 'rt') as bestand:

print(bestand.read())

In de eerste regel openen we het bestand met de functie open. Het eerste argument is het bestand dat we willen openen. We hebben hier een volledig pad gebruikt: '/etc/passwd'. Als je een bestand wilt lezen dat in dezelfde directory staat als waarin je de Python-interpreter hebt opgestart, hoef je geen volledig pad door te geven: de bestandsnaam volstaat dan. Met het tweede argument 'rt' geven we aan dat we het bestand willen lezen en dat het om een tekstbestand gaat.

De constructie met with is wat Python een ‘context manager’ noemt. In het with-blok heb je toegang tot het object bestand dat het geopende bestand voorstelt. Na het with-blok wordt het bestand automatisch gesloten, zodat je het niet meer kunt lezen. Dit lijkt vanzelfsprekend, maar dat is het niet: ook zonder with kun je bestanden openen, maar als je dan het bestand na gebruik vergeet te sluiten, kan dit tot problemen leiden. Werk dus nooit met bestanden zonder with.

In de tweede regel roepen we de functie read op het object bestand aan. Deze functie geeft de volledige inhoud van het tekstbestand terug als een string, die we dan met print op het scherm tonen. Op een typisch Linux-systeem ziet de uitvoer er als volgt uit (we tonen hier maar enkele regels):

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

Enzovoort

Een tekstbestand regel voor regel lezen

Maar wat als we niet het hele bestand in één keer willen inlezen, maar regel voor regel, bijvoorbeeld omdat we willen testen of de regels aan specifieke voorwaarden voldoen? Geen probleem, ook dat is in Python heel eenvoudig. In plaats van de functie read op je bestand toe te passen, ga je dan met een for-lus door de elementen van het bestand. Het tekstbestand dat je van de functie open terugkrijgt, gedraagt zich immers als een lijst met als elementen de opeenvolgende regels in het bestand.

Een string splitsen

Maar als we die regels een voor een gaan inlezen, moeten we er ook iets mee doen. Zoals je ziet, bevat het bestand /etc/passwd op elke regel allerlei informatie over de gebruiker, telkens afgescheiden door een dubbele punt. We willen elk van die gegevens afzonderlijk uitlezen. Dat gaat eenvoudig met de functie split die we op een string kunnen uitvoeren. Bijvoorbeeld:

>>> 'root:x:0:0:root:/root:/bin/bash'.split(':')

['root', 'x', '0', '0', 'root', '/root', '/bin/bash']

Je ziet hier dat we aan de functie split het teken meegeven dat de verschillende componenten van de string afscheidt: ':'. Het resultaat is een lijst met strings die onderdeel uitmaken van onze lange string, zonder de afscheidingstekens ':'.

De opeenvolgende componenten in de regels van het bestand /etc/passwd hebben overigens de volgende betekenis: gebruikersnaam, ongebruikt, ID van de gebruiker, ID van de groep, volledige gebruikersnaam, persoonlijke map van de gebruiker, shell van de gebruiker.

Een lijst uitpakken

Je kunt nu naar de elementen in de gesplitste string verwijzen met een index, bijvoorbeeld:

>>> informatie = 'root:x:0:0:root:/root:/bin/bash'.split(':')

>>> informatie[0]

'root'

>>> informatie[6]

'/bin/bash'

Maar dat is niet heel duidelijk. Zo willen we informatie[0] eigenlijk gebruiker noemen en informatie[6] de naam shell geven. Gelukkig kun je in Python de elementen van een lijst eenvoudig in één keer aan enkele variabelen toekennen. Dat heet unpacking. In ons voorbeeld gaat dat als volgt:

>>> gebruiker, *_, naam, directory, shell = 'root:x:0:0:root:/root:/bin/bash'.split(':')

>>> gebruiker

'root'

>>> _

['x', '0', '0']

>>> naam

'root'

>>> directory

'/root'

>>> shell

'/bin/bash'

De notatie * gebruik je om een willekeurig aantal elementen uit te pakken. Omdat we in dit geval niet in deze elementen geïnteresseerd zijn, kennen we ze toe aan de variabele met de naam _, vandaar dat we bij het uitpakken *_ gebruiken. We konden dit hier ook vervangen door gebruiker, _, _, _, naam, directory, shell.

Gegevens uit een tekstbestand filteren

Dan weet je nu genoeg om de volgende opdracht uit te voeren: lees het bestand met wachtwoorden regel per regel in en als de shell geen '/usr/sbin/nologin' of '/bin/false' is, toon je de gebruikersnaam, volledige gebruikersnaam en persoonlijke map.

De code ziet er als volgt uit:

with open('/etc/passwd', 'rt') as bestand:

for regel in bestand:

gebruiker, *_, naam, directory, shell = regel.strip().split(':')

if shell not in ['/bin/false', '/usr/sbin/nologin']:

print(' {1} ({0}): {2} ({3})'.format(gebruiker, naam, directory, shell))

We openen dus het bestand /etc/passwd als tekstbestand om te lezen. Voor elke regel in het bestand pakken we de verschillende elementen uit in enkele variabelen. We kijken dan of de shell niet gelijk is aan de twee eerdergenoemde shells. Als aan die voorwaarde is voldaan, tonen we de gebruiker, zijn volledige naam, zijn persoonlijke map en zijn shell.

Er is slechts één nieuwigheid in deze code: de functie strip. Die verwijdert witruimte en nieuwe regels aan het begin en het einde van een string. Dat hebben we hier nodig omdat de shell op het einde van de regel staat en er daar dus een teken voor een nieuwe regel komt. Zonder die aanroep van strip zou de vergelijking in de regel erna niet werken.

Naar een tekstbestand schrijven

Naar een tekstbestand schrijven, verloopt op een vergelijkbare manier als een tekstbestand lezen. We beginnen een with-blok waarin we het bestand openen en daarin schrijven we naar het bestand:

with open('bestand.txt', 'wt') as bestand:

bestand.write('Dit is de eerste regel.\n')

bestand.write('Dit is de tweede regel.\n')

bestand.write('Dit is de derde regel.\n')

Op het einde van elke regel moet je zelf een teken voor een nieuwe regel toevoegen: \n. Een andere manier om een regel naar een tekstbestand te schrijven, is met de functie print, die automatisch een nieuwe regel toevoegt:

print('Dit is de eerste regel.', file=bestand)

Merk op dat we het bestand openen met als tweede argument 'wt', waarmee we aangeven dat we naar het bestand willen schrijven. Op deze manier overschrijven we alle al bestaande inhoud van het bestand, dus let hiermee op!

Als je deze situatie wilt vermijden, kun je open aanroepen met de bestandsmodus 'xt'. Als het bestand nog niet bestaat, doet die hetzelfde als 'wt': je kunt naar het bestand schrijven. Maar als het bestand al bestaat, krijg je een foutmelding:

with open('bestand.txt', 'xt') as bestand:

print('Dit is een test.', file=bestand)

with open('bestand.txt', 'xt') as bestand:

print('Dit is nog een test.', file=bestand)

Traceback (most recent call last):

File "<pyshell>", line 1, in <module>

FileExistsError: [Errno 17] File exists: 'bestand.txt'

Een andere interessante bestandsmodus is 'at' (van ‘append’): hiermee voeg je aan het einde van een bestaand tekstbestand regels toe.

Exceptions afhandelen

In het voorbeeld hierboven zou je waarschijnlijk de foutmelding dat het bestand al bestaat op een nettere manier willen afhandelen. Wat we tot nu toe een foutmelding genoemd hebben, heet in Python een exception. Er bestaan verschillende types exceptions en in je Python-code kun je eenvoudig het optreden van exceptions afvangen. Dat gaat als volgt:

try:

with open('bestand.txt', 'xt') as bestand:

print('Dit is nog een test.', file=bestand)

except FileExistsError:

print('FOUT: Het bestand bestaat al.')

De code binnen het try-blok wordt uitgevoerd zoals normaal. Maar als er binnen dit blok een exception voorkomt, gaat het programma door naar het except-blok. Daarin hebben we aangegeven dat we alleen in de exceptions van het type FileExistsError geïnteresseerd zijn. In het geval er zo een voorkomt, tonen we onze eigen foutmelding. Daarna gaat het programma verder na het except-blok.

Als je meerdere types exceptions wilt afvangen, voeg je meerdere except-blokken toe met elk het andere type exception. Als je voor meerdere types exceptions dezelfde code wilt uitvoeren, dan zet je die exceptions tussen haakjes, zoals hier:

except (ZeroDivisionError, ValueError):

En als je op alle mogelijke exceptions hetzelfde wilt reageren, voeg je gewoon een except-blok zonder de naam van een exception toe, al is dat niet zo vaak zinvol.

Samenvatting

In deze les hebben we geleerd hoe we tekstbestanden kunnen inlezen en strings in onderdelen kunnen splitsen. Ook in de andere richting kun je nu met tekstbestanden werken: je kunt willekeurige tekst naar een bestand schrijven. En doordat je hebt geleerd hoe je exceptions kunt afvangen, hoeven de gebruikers van je programma geen cryptische foutmeldingen van Python meer te krijgen. Omdat je met deze kennis al complexere Python-programma’s kunt schrijven, leer je in de volgende les hoe je je programma meer kunt structureren in functies en modules.

Opdracht

Vraag de gebruiker om een regel zoals root:x:0:0:root:/root:/bin/bash voor gebruik in een wachtwoordbestand op te geven. Schrijf de belangrijkste elementen van de regel naar een afzonderlijke regel in een bestand, in de vorm: Gebruiker: root Naam: root Directory: /root Shell: /bin/bash Zorg dat je programma een heldere foutmelding geeft als de regel niet de correcte vorm voor een wachtwoordbestand heeft.

Uitwerking

regel = input('Voer een regel voor het wachtwoordbestand in: ') try: gebruiker, _, _, _, naam, directory, shell = regel.strip().split(':') with open('wachtwoordbestand', 'wt') as bestand: print('Gebruiker: {}'.format(gebruiker), file=bestand) print('Naam: {}'.format(naam), file=bestand) print('Directory: {}'.format(directory), file=bestand) print('Shell: {}'.format(shell), file=bestand) except ValueError: print('Voer de regel in de volgende vorm in:') print('gebruiker:x:0:0:naam:directory:shell') Dit is een rechtstreekse combinatie van alles wat je in deze les geleerd hebt. Let op: we hebben hier wel gebruiker, _, _, _, naam, directory, shell nodig en niet de kortere versie gebruiker, *_, naam, directory, shell. Met die laatste regel garanderen we immers niet dat de regel uit exact zeven elementen bestaat.

Cheatsheet

exception: een foutmelding in Python pad: de locatie van een bestand, met alle bovenliggende directorynamen erbij

▼ Volgende artikel
Waar voor je geld: 5 sfeervolle slimme verlichtingssets
© Signify
Zekerheid & gemak

Waar voor je geld: 5 sfeervolle slimme verlichtingssets

Bij ID.nl zijn we dol op kwaliteitsproducten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we binnen een bepaald thema naar zulke deals. Ben je op zoek naar betaalbare slimme verlichting voor jouw woonkamer of tuin? Vandaag hebben we vijf interessante modellen voor je gespot.

Philips Hue White and Color Ambiance Festavia

Met dit slimme lichtsnoer van twintig meter kun je een tuin of kamer sfeervol verlichten. Vanuit de Philips Hue-app stuur je de 250 leds aan. Bepaal welke kleuren en scènes je wilt weergeven, waarbij je fraaie tinten in elkaar laat overlopen. Pas verder het dimniveau en de helderheid aan. Dankzij de lengte creëer je opvallende effecten op de gevel of binnenmuur. Daarnaast hang je het snoer net zo makkelijk in een flinke kerstboom. De zwarte kabel valt in dat geval niet op. De configuratie is niet moeilijk, want het verlichtingssysteem communiceert via bluetooth rechtstreeks met een smartphone.

Je kunt de Philips Hue White and Color Ambiance Festavia ook op een geschikte bridge aansluiten. Dat heeft als voordeel dat je de lampjes overal op afstand kunt bedienen. Bovendien laat je de lampjes eventueel met andere slimme apparaten samenwerken. Je gebruikt de lichtslinger zowel binnen als buiten, want de leds zijn weerbestendig. Naast deze uitvoering van twintig meter is er tegen een meerprijs ook een lichtslinger van veertig meter (500 leds) te koop.

Philips Hue White GU10 (2-pack)

Deze slimme spotjes zijn een goed alternatief voor 'domme' ledspots of energieslurpende halogeenlampjes. Ze passen in een standaard GU10-fitting, waardoor je alle oude ledspots een-op-een kunt vervangen. Zeker wanneer je meerdere lampjes combineert, is de opbrengst van 400 lumen per stuk behoorlijk fel. De kleurtemperatuur voor wittinten loopt tot 2700 kelvin. Deze lamp ondersteunt geen kleurenweergave.

De Philips Hue White GU10 communiceert via bluetooth met de Philips Hue-app op je smartphone. Selecteer vervolgens de gewenste helderheid of kies een mooie lichtscène. Zo bevat de app schema's die je helpen om je beter te concentreren of te relaxen. Houd er wel rekening mee dat het bereik van bluetooth beperkt is. Als je de slimme ledspots alsnog vanaf elke plek wilt bedienen, kun je de Philips Hue Bridge overwegen. Hierop sluit je tot vijftig geschikte lampen aan. Je hebt dan ook toegang tot meer functies, zoals geofencing. Kom je 's avonds bijvoorbeeld laat thuis, dan springen de ledspots vanzelf aan.

WiZ A60 (2-pack)

Gebruik deze betaalbare verlichtingsset voor bestaande lampen. Je draait de E27-fitting gewoon in de armatuur van bijvoorbeeld een vloer-, bureau- of tafellamp. Via de WiZ Connected-app verbind je beide peertjes rechtstreeks met jouw wifi-netwerk. Het gebruik van een bridge is dus niet nodig, terwijl je de lampen vanaf overal ter wereld kunt bedienen. Is er geen draadloos netwerk beschikbaar? Geen probleem, want als alternatief stuur je ze via een bluetooth-verbinding aan.

In de app kies je tussen zo'n zestien miljoen kleuren, al kun je ook een warme wittint selecteren. Ook kun je effecten en routines instellen. De lichtsterkte van 806 lumen is voor een doorsnee (woon)kamer ruimschoots voldoende. Nuttig om te weten is dat dit WiZ-product met verschillende smarthomeplatformen overweg kan, waaronder Google Home en Apple HomeKit. Je schaft de twee E27-lampen tegen een kleine meerprijs eventueel inclusief afstandsbediening aan. Hiermee switch je eenvoudig tussen vier vooraf geprogrammeerde scènes en dim de verlichting.

Lees ook: 10 vragen over slimme verlichting

Twinkly Light Tree 3D

Deze lichtgevende kerstboom maakt van jouw tuin een heuse bezienswaardigheid. Met een mast en haringen zet je de slinger met 750(!) ledlampjes stevig vast. Prik vervolgens de bijgesloten stekker in het stopcontact om deze vier meter hoge kerstboom te verlichten. Je kunt als alternatief ook een uitvoering van drie meter of zelfs zes meter kopen. Het product voldoet aan de eisen van de IP44-norm en kan een spatje regen dus prima verdragen.

Zodra de mast eenmaal staat, gebruik je de Twinkly-app op je smartphone om de verlichting te configureren. Dat werkt via een rechtstreekse bluetooth- of wifiverbinding. Je hebt hierbij keuze tussen alle kleuren van de regenboog, maar je kunt desgewenst ook voor warm wit licht kiezen. In de app staan er tientallen fraaie (knipperende) lichteffecten voor je klaar. Bovendien creëer je eventueel ook eigen effecten. Vind je de lampjes te fel, dan verlaag je de helderheid ervan. Stel verder een tijdschema in. Een leuke optie is dat de Light Tree 3D optioneel met andere Twinkly-verlichtingssystemen samenwerkt.

TP-Link Tapo L630 (4-pack)

Voeg met dit prijsvriendelijke 4-pack in één klap kleurenverlichting toe aan bijvoorbeeld je plafond of keuken. Wie niet zoveel lampjes nodig heeft, kan ook een 2-pack overwegen. De TP-Link Tapo L630 heeft een gangbare GU10-fitting, waardoor je oude spotjes in huis eenvoudig kunt vervangen. In de behuizing bevindt zich een wifi-adapter. Hierdoor verbind je de lampen rechtstreeks met het draadloze thuisnetwerk. In tegenstelling tot veel andere slimme verlichtingssystemen heb je dus geen bridge of basisstation nodig.

De kleurtemperatuur loopt van 2200 tot 6500 kelvin, zodat je volop kunt variëren tussen koele en warme wittinten. Verder stel je net zo makkelijk een vrolijk kleurtje in, want je hebt keuze tussen zestien miljoen kleuren. De GU10-spotjes ondersteunen een behoorlijke lichtsterkte van maximaal 350 lumen, maar je kunt ze naar behoefte dimmen. Handig is dat je in de TP-Link Tapo-app desgewenst diverse schema's instelt. Op die manier springt de verlichting 's avonds vanzelf aan. Het is zelfs mogelijk om de lampen af te stemmen op de zonsopgang en -ondergang. Even geen smartphone bij de hand? Geen probleem, want je bedient de Tapo L630 net zo makkelijk met je stem. Dat werkt via Amazon Alexa of Google Assistent.

▼ Volgende artikel
Sinterklaasje, kom maar binnen met je… airfryer! Snelle feesthapjes voor pakjesavond en kerst
© ID.nl
Huis

Sinterklaasje, kom maar binnen met je… airfryer! Snelle feesthapjes voor pakjesavond en kerst

In de drukke decembermaand wil je iets lekkers op tafel zetten, maar liever niet de hele middag in de keuken staan. De airfryer is dan je beste hulp: één apparaat waarmee je supersnel allerlei snacks en lekkernijen maakt, zonder dat de keuken ontploft. Van kruidnoten tot bladerdeegsterren en mini-kaaskroketjes: fijne feestdagen!

Dit gaan we doen:

In dit artikel vind je ideeën voor zoete en hartige tussendoortjes uit de airfryer, perfect voor pakjesavond, kerst of oud en nieuw. We laten zien hoe je hapjes snel bereidt, hoe je zorgt dat alles krokant wordt en hoe je met een beetje creativiteit een complete feesttafel vult.

Lees ook: Nou dát is handig: ontdek de verborgen talenten van je airfryer!

Kleine hapjes, groot gemak

Wie denkt dat de airfryer alleen geschikt is voor friet en kroketten, heeft het mis. Met bladerdeeg, een beetje creativiteit en wat basis-­ingrediënten maak je in korte tijd verrassend veel verschillende gerechtjes. Denk aan mini-saucijzenbroodjes, bladerdeeghapjes met brie en cranberry of kleine pizzarondjes met tomaat en mozzarella.

Extra krokant

De meeste hapjes worden vanzelf krokant door de hete lucht. Is iets te droog, spray dan een klein beetje olie met een verstuiver over het eten. Daarmee gebruik je minder olie dan wanneer je het eten zou bestrijken – terwijl je wel hetzelfde knapperige resultaat hebt.

Recept: kruidnoten uit de airfryer

Zelf kruidnoten maken is leuk en makkelijk. Extra bonus: heel je huis ruikt meteen naar Sinterklaas! Meng 250 gram zelfrijzend bakmeel met 125 gram bruine basterdsuiker, twee theelepels speculaaskruiden, een snuf zout, 150 gram roomboter(ongezouten) in blokjes en vier eetlepels melk. Kneed tot een soepel deeg, rol er kleine bolletjes van en leg die met wat tussenruimte in het mandje van de airfryer. Bak ze in circa 10 tot 12 minuten op 180 graden goudbruin. Schud halverwege even met de mand zodat ze rondom gelijk kleuren. Laat de kruidnoten daarna volledig afkoelen; dan worden ze knapperig.

Wil je er chocoladekruidnoten van maken, smelt dan pure, melk- of witte chocolade au bain-marie. Haal de afgekoelde kruidnoten door de gesmolten chocolade, leg ze op bakpapier en laat ze uitharden. Een uurtje in de koelkast is voldoende.

©ID.nl

Nog meer lekkers voor wie (van) zoet is

Nog meer zoete trek?De airfryer is je beste vriend. Je kunt er mini-appelflappen in bakken, kleine kaneelbroodjes of plakjes appel met kaneel en een beetje honing. Het bakt snel en de suiker karamelliseert mooi zonder dat je extra boter nodig hebt. Voor een feestelijke touch kun je wat poedersuiker of gesmolten chocolade toevoegen zodra deze zoete hapjes uit de mand komen.

Wie het makkelijk wil houden, gebruikt kant-en-klaar deeg of koekjesdeeg: rol kleine balletjes, leg ze in de airfryer en bak ze een paar minuten tot ze goudbruin zijn. Ideaal als snelle zoete traktatie bij de koffie of als dessertje na het eten.

Recept: bladerdeegsterren met kerstige vullingen

Bladerdeegsterren zien er feestelijk uit en zijn eenvoudig te maken. Snijd vierkante plakjes bladerdeeg diagonaal in om de punten te vormen, vouw de hoeken om en druk het midden iets in met een lepel zodat er na het bakken een klein 'bakje' ontstaat. Bak de sterren in de airfryer op 180 graden gedurende 8 tot 10 minuten tot ze goudbruin en luchtig zijn. Laat ze even afkoelen voordat je ze vult.

Drie combinaties die goed werken: 🧀 brie met cranberry en walnoot, 🐟 zalm met roomkaas en dille, of 🐐 geitenkaas met honing en tijm. Schep de vulling in het midden, garneer eventueel met wat rucola of peterselie en serveer ze warm of lauw. Op een rooster blijven ze het langst krokant. Tip: je kunt de brie of geitenkaas ook een paar minuten voor het einde van de baktijd toevoegen. De kaas smelt dan een beetje, wat extra lekker is.

©ID.nl

Hapjes warmhouden in de airfryer

De airfryer houdt hapjes goed warm als je de temperatuur laag zet. Kies 80 graden zodat ze niet verder bruin worden of uitdrogen. Laat de hapjes in één laag in het mandje liggen, dan blijft de luchtstroom gelijkmatig. Beperk de tijd tot ongeveer twintig minuten, want daarna worden ze merkbaar minder knapperig. Werk je in rondes, warm dan de volgende portie pas op wanneer de vorige bijna geserveerd wordt. Hierdoor blijft alles zo vers mogelijk.

Recept: mini-kaaskroketjes voor oud en nieuw

Ook voor oudejaarsavond is de airfryer een uitkomst. Mini-kaaskroketjes worden er precies goed in: knapperig van buiten en romig van binnen. Je kunt een kant-en-klare diepvriesvariant gebruiken, maar zelf maken kan ook. Dat kost wel wat meer tijd. Begin een dag van tevoren. Maak een dikke kaassaus door boter te smelten op matig vuur, bloem erdoor te roeren en geleidelijk melk toe te voegen terwijl je blijft roeren. Laat de saus binden, roer er geraspte oude kaas doorheen tot die gesmolten is en breng op smaak. Laat de massa volledig afkoelen en zet minimaal 4 uur (of een nacht) in de koelkast. Rol de volgende dag kleine balletjes of rolletjes van het afgekoelde mengsel, haal ze achtereenvolgens door bloem, eigeel en paneermeel en bak ze in de airfryer op 200 graden in ongeveer 7 minuten goudbruin. Serveer ze met mosterd of een pittige dipsaus.

©ID.nl

Je ideale keukenhulp voor de feestdagen

De airfryer bewijst in december zijn waarde. Je maakt er zonder moeite hapjes mee voor elk moment, van sinterklaasavond tot oud en nieuw. Of het nu gaat om kruidnoten, bladerdeegsterren of kaaskroketjes: met de airfryer is het zo gepiept. Zo blijft er genoeg tijd over voor wat écht belangrijk is: gezelligheid aan tafel.

🎯 Populairste merken airfryer in NL

Philips
Aanrader: Philips 3000 Series NA352/00 Airfryer 9 L Dual Basket. Dubbele mand en ruime inhoud, geschikt voor gezinnen of grotere porties. Reviewscore op Kieskeurig: 8,2.

Tefal
Aanrader: Tefal Dual Easy Fry & Grill EY905D 8.3L XXL Airfryer. Ruim model met twee lades, geschikt voor grotere porties of volledige maaltijden. Reviewscore op Kieskeurig: 8,8.

Inventum
Aanrader: Inventum GF500HLD Airfryer. Betaalbare instapper; handig voor kleinere huishoudens. Reviewscore op Kieskeurig: 9,2.

Princess
Aanrader: Princess Double Basket Airfryer - 8L - 2400W. Dubbele airfryer met twee manden van 4 liter. Meer dan genoeg capaciteit voor een gezin. Reviewscore op Kieskeurig: 8,5.

Ninja
Aanrader: Ninja Airfryer XXL Max Pro. Geschikt voor 3-4 personen. Gelijkmatige resultaten bij friet, groenten en vlees. Dankzij de hogere stand wordt alles extra knapperig. Reviewscore op Kieskeurig: 9,6.

🔟 Over de reviewscores op Kieskeurig.nl
Op Kieskeurig.nl schrijven consumenten reviews over producten. Bij de beoordeling zie je niet alleen het gemiddelde cijfer, maar ook hoeveel reviews er zijn geschreven. Zo krijg je meteen een indruk of de score op basis van één enkele review is of op basis van veel gebruikerservaringen.

🎄 Maak het extra feestelijk

Het mooiste kerstservies