Is it possible to report an error without self?
Pass the method name to items available_scenes_enum = bpy.props.EnumProperty(items = available_scenes , name="Enum") and in the method definition def available_scenes(self, context)  where in this case self will be the operator, in which case may as well make it an operator method along with execute, draw etc. &amp; when calling it from the operator use self.available_scenes(context).  Btw returning an empty list would be more appropriate than False which will lead to an error as a return value for items in an enum.

Also remember the items list needs to have ('ENUMPROP', 'propname', 'propdescription') items, as in your static example.

import bpy
import os

print("\n"*5)



class MATERIALS_Export(bpy.types.Operator):
    '''Set an operator'''
    bl_idname = "scene.select"
    bl_label = "Select a scene from list"

    def check(self):
            '''Check if our scene is saved'''
            currentScene = bpy.data.filepath.replace('\\', '/') # huh???
            if not currentScene:
                self.report({'ERROR_INVALID_INPUT'}, "You're not on a saved blend, save before you continue")
                return False
            return True

    def available_scenes(self, context):
        '''Return the list to show on the popup'''
        if self.check():
            output_dir = bpy.path.abspath("//")
            scenes = [(file, file, file) for file in os.listdir(output_dir) if len(file.split('.blend')) == 2]
            #print('OUTPUT DIR -&gt; ', output_dir, ' \nSCENES -----&gt; ', scenes)
            return scenes
        return []

    #available_scenes_enum = bpy.props.EnumProperty(items = [('one', 'eins', 'un'), ('two', 'zwei', 'deux'), ('three', 'drei', 'trois')], name= "Scenes") #This works fine
    available_scenes_enum = bpy.props.EnumProperty(items = available_scenes , name="Enum") #This doesn't work

    def execute(self, context):
        self.available_scenes(context)  #not sure why you'd call this here???
        return {'FINISHED'}

    def invoke(self, context, event):
        wm = context.window_manager
        return wm.invoke_props_dialog(self)


class MATERIALS_ExportPanel(bpy.types.Panel):
    bl_label = "Materials"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
    bl_category = "Open_Scene"

    def draw(self, context):
        self.layout.operator("scene.select", text = "Select a scene from list")

def register():
    bpy.utils.register_module(__name__)

if __name__ == "__main__":
    register()