Geavanceerde topics

Functies schrijven in Python

Shayne Miel

Software Architect @ Duo Security

Geneste contexten

def copy(src, dst):
  """Kopieer de inhoud van het ene bestand naar een ander.

  Args:
    src (str): Bestandsnaam van het bronbestand.
    dst (str): Waar het nieuwe bestand te schrijven.
  """

# Open het bronbestand en lees de inhoud with open(src) as f_src: contents = f_src.read() # Open het doelbestand en schrijf de inhoud weg with open(dst, 'w') as f_dst: f_dst.write(contents)
Functies schrijven in Python

Geneste contexten

with open('my_file.txt') as my_file:
  for line in my_file:
    # doe iets
Functies schrijven in Python

Geneste contexten

def copy(src, dst):
  """Kopieer de inhoud van het ene bestand naar een ander.

  Args:
    src (str): Bestandsnaam van het bronbestand.
    dst (str): Waar het nieuwe bestand te schrijven.
  """

# Open beide bestanden with open(src) as f_src: with open(dst, 'w') as f_dst:
# Lees en schrijf regel voor regel for line in f_src: f_dst.write(line)
Functies schrijven in Python

Fouten afhandelen

def get_printer(ip):
  p = connect_to_printer(ip)

  yield

  # Dit MOET worden aangeroepen, anders kan niemand
  # meer met de printer verbinden
  p.disconnect()
  print('verbinding met printer verbroken')

doc = {'text': 'This is my text.'} with get_printer('10.0.34.111') as printer: printer.print_page(doc['txt'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    printer.print_page(doc['txt'])
KeyError: 'txt'
Functies schrijven in Python

Fouten afhandelen

try:
  # code die een fout kan geven
except:
  # handel de fout af

finally: # dit draait altijd
Functies schrijven in Python

Fouten afhandelen

def get_printer(ip):
  p = connect_to_printer(ip)

  try:
    yield
  finally:
    p.disconnect()
    print('verbinding met printer verbroken')

doc = {'text': 'This is my text.'} with get_printer('10.0.34.111') as printer: printer.print_page(doc['txt'])
verbinding met printer verbroken
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    printer.print_page(doc['txt'])
KeyError: 'txt'
Functies schrijven in Python

Contextmanager-patronen

Open Sluit
Vergrendel Ontgrendel
Wijzig Reset
Enter Exit
Start Stop
Setup Teardown
Verbind Verbreek
1 Aangepast van Dave Brondsema's talk op PyCon 2012: https://youtu.be/cSbD5SKwak0?t=795
Functies schrijven in Python

Laten we oefenen!

Functies schrijven in Python

Preparing Video For Download...