diff --git a/tools/pydfu.py b/tools/pydfu.py
index af805b4ce1239c81e76f646d2a7fc28580b0b5da..8b4e960eb909bceacf615e044089cfd28f783533 100755
--- a/tools/pydfu.py
+++ b/tools/pydfu.py
@@ -239,7 +239,7 @@ def consume(fmt, data, names):
 
 def cstring(string):
     """Extracts a null-terminated string from a byte array."""
-    return string.split('\0', 1)[0]
+    return string.split(b'\0', 1)[0]
 
 
 def compute_crc(data):
@@ -361,8 +361,8 @@ def get_dfu_devices(*args, **kwargs):
     refine the search.
     """
 
-    return usb.core.find(*args, find_all=True,
-                         custom_match=FilterDFU(), **kwargs)
+    return list(usb.core.find(*args, find_all=True,
+                              custom_match=FilterDFU(), **kwargs))
 
 
 def get_memory_layout(device):
@@ -504,7 +504,11 @@ def main():
         list_dfu_devices(idVendor=__VID, idProduct=__PID)
         return
 
-    init()
+    try:
+        init()
+    except ValueError as er:
+        print(str(er))
+        sys.exit(1)
 
     if args.mass_erase:
         print ("Mass erase...")