- Issue #719888: Updated tokenize to use a bytes API. generate_tokens has been
  renamed tokenize and now works with bytes rather than strings. A new
  detect_encoding function has been added for determining source file encoding
  according to PEP-0263. Token sequences returned by tokenize always start
  with an ENCODING token which specifies the encoding used to decode the file.
  This token is used to encode the output of untokenize back to bytes.

Credit goes to Michael "I'm-going-to-name-my-first-child-unittest" Foord from Resolver Systems for this work.
diff --git a/Lib/inspect.py b/Lib/inspect.py
index ceaea5a..5cb958b 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -657,7 +657,9 @@
     """Extract the block of code at the top of the given list of lines."""
     blockfinder = BlockFinder()
     try:
-        tokenize.tokenize(iter(lines).__next__, blockfinder.tokeneater)
+        tokens = tokenize.generate_tokens(iter(lines).__next__)
+        for _token in tokens:
+            blockfinder.tokeneater(*_token)
     except (EndOfBlock, IndentationError):
         pass
     return lines[:blockfinder.last]