Handler Function doesn't update Text Object in 3d_View
An issue of scope.
As mentioned in a prior answer.  Defining frame current outside the handler sets it to what the current frame was when question script above is run and the handler is registered.
If you want current frame when the handler is run
def frame_change(scene):
    frame_end = 200
    frame_current = scene.frame_current
    print(frame_current ,&quot; = script start&quot;)

secondly recommend don't scope an object outside the handler, instead within the handler
ob = scene.objects.get(&quot;Text&quot;)
if ob:
    # it exists do something to it.

Also don't mix context with handlers. Every chance it will not work as expected, especially when rendering.
Related.
Handler-script updates in viewport but not in render
This should work in 2.7
Notice for 2.7x use frame change pre, for 2.9 use frame change post.
Notice the use of the div operator
int(frame_current) // 10

to set on each frame, otherwise will not set properly until a 10th frame using the modulus == 0 operator.
import bpy 
from bpy.app  import handlers


from bpy.app.handlers import persistent
@persistent
def frame_change(scene):
    frame_current = scene.frame_current
    frame_end = 200
    obj_active = scene.objects.get(&quot;Text&quot;)
    print(frame_current ,&quot; = script start&quot;)
    if obj_active is None:
        return # no font object named &quot;Text&quot;
    if frame_current &lt;= frame_end:
        obj_active.data.body = str(int(frame_current) // 10)      
        print(frame_current , int(frame_current) // 10) 
    print(frame_current ,&quot; = script end&quot;)     
 
def register():    
    handlers.frame_change_pre.clear()   # use when testing will burn others
    handlers.frame_change_pre.append(frame_change)


def unregister():  
    handlers.frame_change_pre.remove(frame_change)
 

if __name__ == &quot;__main__&quot;:
    register()