How to find if geometry linked to an edge is coplanar
Checking if all selected geometry is coplanar.

Similarly to this answer I find using the convex hull bmesh operator, and calculate volume on result a quick and dirty (and somewhat bulletproof) way to calculate if all geometry lies on the same plane.  Doesn't need to calculate face normals at a all.

Here is a test script to run in edit mode, that will report if all selected edges are coplanar.

import bpy
import bmesh
from mathutils import Vector

def coplanar(geom, TOL=0.0001):
    verts = []
    for g in geom:
        if hasattr(g, "verts"):
            verts.extend(v.co for v in g.verts)
        else:
            verts.append(g.co)
    if len(verts) &lt; 3:
        return True
    o = sum(verts, Vector((0,0,0))) / len(verts)
    bm2 = bmesh.new()    
    for v in verts:
        bm2.verts.new(v - o)    
    bmesh.ops.convex_hull(bm2, input=bm2.verts)    
    vol = bm2.calc_volume() 
    bm2.free()
    return vol &lt;= TOL

context = bpy.context
ob = context.edit_object
me = ob.data
bm = bmesh.from_edit_mesh(me)
edges = [e for e in bm.edges if e.select]

print("Coplanar:", coplanar(edges))


As mentioned by @kheetor if you are seeing zero normals, you most likely need to update them bm.normal_update() or on a per face basis with face.normal_update(). 

Also suggest using a tolerance rather than equality when comparing float values.  For example in your script above.

# check they're all the same vector
coplanarity = all((normals[0]).angle(x) &lt; 0.0001 for x in normals)


would IMO be a better test than normals[0] == x.