this is old, deprecated code. with BMesh you don't have to enter object mode to update. be in objectmode before running this, or modify the code to do that for you.
import bpy
# start with adding a plane at 0,0,0 ,set 3d cursor to 0,0,0
bpy.ops.mesh.primitive_plane_add()
mplane = bpy.context.active_object
# in object mode
if mplane.mode == 'EDIT':
bpy.ops.object.mode_set(mode='OBJECT')
# add 4 verts
mplane.data.vertices.add(4)
mplane.data.vertices[-4].co = (1, -1, 1)
mplane.data.vertices[-3].co = (-1, -1, 1)
mplane.data.vertices[-2].co = (-1, 1, 1)
mplane.data.vertices[-1].co = (1, 1, 1)
for m in mplane.data.vertices:
print(m.co)
print("mplane.data.faces - before")
for l in mplane.data.faces:
print("face===")
for em in l.vertices:
print(em)
# add one face
mplane.data.faces.add(1)
mplane.data.faces[-1].vertices_raw = [7,4,5,6]
mplane.data.update(calc_edges=True)
print("mplane.data.faces - after")
for l in mplane.data.faces:
print("face===")
for em in l.vertices:
print(em)
print("num faces=", len(mplane.data.vertices))
print(mplane.data.faces[-1])