'Remove an edge between u and v.
Parameters
u, v : nodes
Remove an edge between nodes u and v.
key : hashable identifier, optional (default=None)
Used to distinguish multiple edges between a pair of nodes.
If None remove a single (arbitrary) edge between u and v.
Raises
NetworkXError
If there is not an edge between u and v, or
if there is no edge with the specified key.
See Also
remove_edges_from : remove a collection of edges
Examples
>>> G = nx.MultiDiGraph()
>>> nx.add_path(G, [0, 1, 2, 3])
>>> G.remove_edge(0, 1)
>>> e = (1, 2)
>>> G.remove_edge(*e) # unpacks e from an edge tuple
For multiple edges
>>> G = nx.MultiDiGraph()
>>> G.add_edges_from([(1, 2), (1, 2), (1, 2)])  # key_list returned
[0, 1, 2]
>>> G.remove_edge(1, 2) # remove a single (arbitrary) edge
For edges with keys
>>> G = nx.MultiDiGraph()
>>> G.add_edge(1, 2, key=\'first\')
\'first\'
>>> G.add_edge(1, 2, key=\'second\')
\'second\'
>>> G.remove_edge(1, 2, key=\'second\')'

def remove_edge(self, u, v, key=None):

    try:
        d = self._adj[u][v]
    except KeyError:
        raise NetworkXError(('The    edge    %s-%s    is    not    in    the    graph.' % (u, v)))
    if (key is None):
        d.popitem()
    else:
        try:
            del d[key]
        except KeyError:
            msg = 'The    edge    %s-%s    with    key    %s    is    not    in    the    graph.'
            raise NetworkXError((msg % (u, v, key)))
    if (len(d) == 0):
        del self._succ[u][v]
        del self._pred[v][u]
