Edit: This post may either be confusing or informative. See the post below. 
The implementation I was thinking of for the global list was to store a list of strings containing the names of hidden objects. The Add Object actuator can add objects by name and this name could be retrieved from the list.
I think you are getting the error because you are storing a list of strings but are trying to reference the object with that name. ie. calling the string rather than the object.
The method that I was thinking of was to automate the setting up of the global list as much as possible. I was thinking that you could create a list of strings before the game runs and then read in the list at runtime to set up the GameLogic.globalList. This would enable an arbitrarily large number of hidden objects to be used by the game. If you wanted to hard code the creation of the list then the number of objects would be limited by the time that you want to spend creating the list.
I don’t really understand what you’re trying to do. If you’re trying to add a hidden object to the game at the location of an empty then you’d want to use an Edit Object actuator, set the name of the object to add using setObject(“name of object here”) and use the instantAddObject() method of the actuator.
If the global list holds a list of strings:
#initialise the global list as above, then...
gl = GameLogic.globalList
gl.append("OBHj1")
gl.append("OBHj2")
gl.append("OBHj3")
Assuming you’ve got the add object actuator, the list could be used like this:
for objName in GameLogic.globalList:
actuator.setObject(objName)
actuator.instantAddObject()
addedObject = GameLogic.getObjectList()[objName]
empty = GameLogic.getObjectList()["OBEmpty"]
addedObject.setPosition(empty.getPosition())
This code snippet might have bugs, I’ve not checked it, but it should add all hidden objects to the scene whose names are stored as strings in the global list. It will then retrieve the object from the scene’s object list (so you can work with the object and not just it’s name), it will then retrieve the empty from the scene’s object list and set the position of the newly added object to the position of the empty.
It will set the position of every added object to the position of the same empty. If you want to use different emptys then you would need to change the name of the empty whose position you want to use. This could be done using string manipulation, like take the number of the added object and add that to the name of the empty that you’re using. I’d suggest you learn a little about string manipulation in Python to do this. Byte of Python is a pretty good beginner’s online book that explains this.
Edit: If you want to store both the name of the object and a reference to the object itself in a list then you might be better off using a dictionary. You can then use the name of the object to reference the object itself. To actually form the dictionary containing the objects though you’d need to add them to the scene in order to get a reference to them. It’s a bit of a catch 22 situation because it seems that a reference to an object can only be retrieved after the object has been added to the scene. Since the add object actuator can use either a reference to an object or the name of the object I was thinking that you would want a list of object names. If you are going to be adding a specific object at a specific event then the list might not be needed and you could simply hard code each added object setting each object to add by name using setObject(“OBname”) and then using instantAddObject() to add that specific object to the game. It’s hard to sort this issue since I’m not sure what you’re trying to do.