<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def compile_dm_users(self):
 """ Gets the info for the members within the dm Returns a list of all dms with the members that have ever existed :rtype: [object] { id: <id> users: [<user_id>] } """


        dm_data = self._read_from_json("dms.json")
        dms = dm_data.values()
        all_dms_users = []

        for dm in dms:
            # checks if messages actually exsist
            if dm["id"] not in self._EMPTY_DMS:
                # added try catch for users from shared workspaces not in current workspace
                try:
                    dm_members = {"id": dm["id"], "users": [self.__USER_DATA[m] for m in dm["members"]]}
                    all_dms_users.append(dm_members)
                except KeyError:
                    dm_members = None   

        return all_dms_users