How to check, why bpy.ops.render.render returns cancelled?

I need to call render in a loop. I start render, set handlers and after render finishing start it again. Something like this:


class loopRender(bpy.types.Operator):
    bl_idname = "render.loop_render"
    def execute(self, context):
        bpy.app.handlers.render_complete.append(onRenderFinish)
        a = bpy.ops.render.render('INVOKE_DEFAULT')
        print(a)
def onRenderFinish(scene):
    bpy.app.handlers.render_complete.remove(onRenderFinish)
    bpy.ops.render.loop_render()

It works, but sometimes bpy.ops.render.render(‘INVOKE_DEFAULT’) returns {‘CANCELLED’} and loop stops. I don’t understand how to check what the reason of this error? And how to fix it?

Check this.