When I run import bpy bpy.ops.wm.read_homefile() and then I replace the above with this (in the same text data block) import bpy rrr = bpy.ops.object.select_all(action='SELECT') print("select_all result:", rrr) print(">>>>>>>>>> bpy.context:", bpy.context) print(">>>>>>>>>> bpy.context.object:", bpy.context.object) print(">>>>>>>>>> bpy.context.object.name:", bpy.context.object.name) and run it, I get this select_all result: {'FINISHED'} >>>>>>>>>> bpy.context: <bpy_struct, Context at 0x000000EEA420B5C8> >>>>>>>>>> bpy.context.object: <bpy_struct, Object("Cube")> >>>>>>>>>> bpy.context.object.name: Cube However, when I run this (same code but merged) import bpy bpy.ops.wm.read_homefile() rrr = bpy.ops.object.select_all(action='SELECT') print("select_all result:", rrr) print(">>>>>>>>>> bpy.context:", bpy.context) print(">>>>>>>>>> bpy.context.object:", bpy.context.object) print(">>>>>>>>>> bpy.context.object.name:", bpy.context.object.name) I get this select_all result: {'PASS_THROUGH'} >>>>>>>>>> bpy.context: <bpy_struct, Context at 0x000000EEA420B5C8> Traceback (most recent call last): File "\Text", line 7, in <module> AttributeError: 'Context' object has no attribute 'object' Why does that happen? Is there a way to make the code after `bpy.ops.wm.read_homefile()` work "normally"? **Edit:** It seems that `bpy.ops.wm.read_homefile()` effectively "clears" the context - the `bpy.context.area` is `None`. So the new question is **how to bring the context back to the correct area?** **Edit 2:** I have found a workaround that searches for 3D View area and makes it current context - and here is the dubious part - by calling `bpy.ops.screen.screen_full_area()`: import bpy bpy.ops.wm.read_homefile() havesetthecontext = False for window in bpy.context.window_manager.windows: screen = window.screen for area in screen.areas: print("area=", area) if area.type == 'VIEW_3D': override = {'window': window, 'screen': screen, 'area': area} bpy.ops.screen.screen_full_area(override) # toggle to maximize bpy.ops.screen.screen_full_area() # toggle back (must not use overridden context, else it will crash!) havesetthecontext = True break if havesetthecontext: rrr = bpy.ops.object.select_all(action='DESELECT') print("select_all result:", rrr) print(">>>>>>>>>> bpy.context:", bpy.context) print(">>>>>>>>>> bpy.context.object:", bpy.context.object) print(">>>>>>>>>> bpy.context.object.name:", bpy.context.object.name) else: print("Could not set the context to 3D View!") Now, **isn't there a way to set a context directly**, something like `bpy.context.set(override)`?