How can I check if the object exists in python? I want to create an add-on but I'm unable to find any reference. For example how can I check if "Cube" exist? If yes I will make another object green, if no I will make it red.
2 Answers
Best practice is iterating through Scene.objects collection (all objects of the current scene):
import bpy
for o in bpy.context.scene.objects:
if o.name == "Cube":
print ("Cube found in scene")
Even easier to read is using python's get() on the actual collection to get the reference:
cube = bpy.context.scene.objects.get("Cube")
if cube:
print ("Cube found in scene")
Recommend use the python console to figure out:
>>> C.scene.objects.get("Cube")
bpy.data.objects['Cube']
Alternatively you can also iterate through Data.objects (all objects of the actual file using):
>>> D.objects.get("Cube")
bpy.data.objects['Cube']
For the sake of completeness, demo on how to get all objects starting with "Cube":
import bpy
objs = []
for o in bpy.data.objects:
if o.name.startswith("Cube"):
objs.append(o)
if objs:
print ("Cube found {} time(s) in file".format(len(objs)))
- 12,613
- 4
- 50
- 93
I use .keys()
objects = bpy.context.scene.objects.keys()
if 'Cube' not in objects:
print("cube doesn't exist!")
elif 'Cube' in objects:
print("Cube exists!!")
the same as dict.keys() in python dict returns a list of the objects names
-
Thanks for trying to help, however there's a few issues with your answer, which have resulted with a downvote: an answer already exists, but you didn't explain why your answer is a reasonable alternative to it; you didn't check your answer (there's a syntax error because of the apostrophe in the string); there's no point in calling
.keys()method, as that will be the default iterator; instead of usingelifyou could just useelseand make the code cleaner. – Markus von Broady Feb 25 '21 at 13:44 -
This answer is much better than the selected answer. Yes there is a syntax error but I really appreciate the key idea highlighted in this answer which is to use dictionaries something which we do so frequently in regular python codes. Also i appreciate the explicit usage of
keys(). – Mohit Lamba Mar 05 '23 at 01:44
if 'Cube' in bpy.context.scene.objects:? – Markus von Broady Feb 25 '21 at 13:39prop_collectionsimilar to a dict -__contains__slot... get() is prefered and also returns a reference to work with, so I'd use it @MarkusvonBroady – brockmann Feb 25 '21 at 14:09get()– Mohit Lamba Mar 05 '23 at 01:48