code: def nx_gen_edge_values(G, key, edges=None, default=util_const.NoParam,
                         on_missing='error', on_keyerr='default'):
      if edges is None:
          edges = G.edges()
      if on_missing is None:
          on_missing = 'error'
      if on_keyerr is None:
          on_keyerr = 'default'
      if default is util_const.NoParam and on_keyerr == 'default':
          on_keyerr = 'error'
      if on_missing == 'error':
          data_iter = (G.adj[u][v] for u, v in edges)
      elif on_missing == 'default':
          data_iter = (G.adj[u][v] if G.has_edge(u, v) else {}
                       for u, v in edges)
      else:
          raise KeyError('on_missing={} must be error, filter or default'.format(
              on_missing))
      if on_keyerr == 'error':
          value_iter = (d[key] for d in data_iter)
      elif on_keyerr == 'default':
          value_iter = (d.get(key, default) for d in data_iter)
      else:
          raise KeyError('on_keyerr={} must be error or default'.format(on_keyerr))
      return value_iter