Since you're using something from `bpy.ops`, you need to get the editor state right (this is the failing of most of `bpy.ops`).

You probably need to set `bpy.context.scene.objects.active = target`

and in 2.8+

    context.view_layer.objects.active = target