docs: def izip_exact(*iterables):
      """
      A lazy izip() that ensures that all iterables have the same length.
      A LengthMismatch exception is raised if the iterables' lengths differ.
  
      Examples
      --------
  
          >>> list(zip_exc([]))
          []
          >>> list(zip_exc((), (), ()))
          []
          >>> list(zip_exc("abc", range(3)))
          [('a', 0), ('b', 1), ('c', 2)]
          >>> try:
          ...     list(zip_exc("", range(3)))
          ... except LengthMismatch:
          ...     print "mismatch"
          mismatch
          >>> try:
          ...     list(zip_exc(range(3), ()))
          ... except LengthMismatch:
          ...     print "mismatch"
          mismatch
          >>> try:
          ...     list(zip_exc(range(3), range(2), range(4)))
          ... except LengthMismatch:
          ...     print "mismatch"
          mismatch
          >>> items = zip_exc(range(3), range(2), range(4))
          >>> next(items)
          (0, 0, 0)
          >>> next(items)
          (1, 1, 1)
          >>> try: next(items)
          ... except LengthMismatch: print "mismatch"
          mismatch
  
      References
      ----------
  
      [1] http://code.activestate.com/recipes/497006-zip_exc-a-lazy-zip-that-ensures-that-all-iterables/
  
      """
      rest = [chain(i, _throw()) for i in iterables[1:]]
      first = chain(iterables[0], _check(rest))
      return zip(*[first] + rest)