diff --git a/build.py b/build.py
index 948aa9e504e13adee84eab35ac44d7550392c997..54af4f8b23fdfbe7fa4c2f10283eaa6006eb0988 100644
--- a/build.py
+++ b/build.py
@@ -4,6 +4,13 @@ import json, sys
 import os.path
 
 
+def readin(path, func=lambda x: x, orelse=None):
+    if os.path.exists(path):
+        with open(path, 'rb') as fin:
+            return func(fin.read())
+    else:
+        return orelse
+
 if __name__ == '__main__':
 
     for lab_name in ('lab'+str(x) for x in xrange(7, start=1)):
@@ -14,9 +21,8 @@ if __name__ == '__main__':
             print('Aborting, no src file')
             sys.exit()
 
-        with open('src/header.md') as fh, open('src/footer.md', 'rb') as ff:
-            header_bin = fh.read()
-            footer_bin = ff.read()
+        header_bin = readin('src/header.md')
+        footer_bin = readin('src/footer.md')
 
         # Make directories
         try:
@@ -25,15 +31,10 @@ if __name__ == '__main__':
             pass
 
         # Load data
-        if os.path.exists('src/'+lab_name+'.json'):
-            with open('src/' + lab_name + '.json', 'rb') as datin:
-                data = json.load(datin)
-        else:
-            data = [{}]
+        data = readin('src/'+lab_name+'.json', json.load, orelse=[{}])
 
         # Load text
-        with open(src_md, 'rb') as labin:
-            lab = labin.read().decode('utf8')
+        lab = readin(src_md, lambda x: x.decode('utf8'))
 
         # Swap placholders
         for ex_no, d in enumerate(data, start=1):