Evaluate FCurve without keyframes won't work
Get the object from the path.
Can get the object from the datapath via (with and without coercing to the value)
&gt;&gt;&gt; C.object.id_data.path_resolve('scale')
Vector((1.0, 1.0, 1.0))

&gt;&gt;&gt; C.object.id_data.path_resolve('scale', False)
bpy.data.objects['Vert.001'].scale

can look at the last part of the path and check whether that property is an array,
&gt;&gt;&gt; C.object.bl_rna.properties['scale'].is_array
True

however it is possibly easier to try and iter and if not use the index.
datapath = 'scale'
index = 0
frame = bpy.context.scene.frame_current

if not (len(fc.keyframe_points) or len(fc.sampled_points)):
    ob = obj.id_data.path_resolve('scale')
    try:
        iter(ob)
        value = ob[index]
    except TypeError:
        value = ob
else:
    value = fcurve.evaluate(frame)        

print(value)