I'm attempting to use py to check if a domain exists, if not, create it, else do nothing. After consulting How do I check if a domain already exists? , arcgis 10.0 - Using arcpy.Exists for domains? - Geographic Information Systems Stack Exchange , and esri geodatabase - Checking if domain already exists using ArcPy? - Geographic Information Systems Stack Exchange I came up with the attached code. If neither domain exists, it fails with:
Start Time<SPAN class="punctuation token">:</SPAN> Sunday<SPAN class="punctuation token">,</SPAN> June <SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2018</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">28</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">13</SPAN> PM
Running script Add Extended Core Fields<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
Failed script Add Extended Core Fields<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
Traceback <SPAN class="punctuation token">(</SPAN>most recent call last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
File <SPAN class="string token">"C:\Temp\PRO_FOLDER_STRUCTURE\EXTENDED_CORE_FIELDS.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">24</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> <SPAN class="operator token"><</SPAN>module<SPAN class="operator token">></SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CreateDomain_management<SPAN class="punctuation token">(</SPAN>gdb_name<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"DOM_YES_NO_UNK_NPS2016"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Is the feature physically observable"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"TEXT"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CODED"</SPAN><SPAN class="punctuation token">)</SPAN>
File <SPAN class="string token">"c:\program files\arcgis\pro\Resources\arcpy\arcpy\management.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">1332</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> CreateDomain
<SPAN class="keyword token">raise</SPAN> e
File <SPAN class="string token">"c:\program files\arcgis\pro\Resources\arcpy\arcpy\management.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">1329</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> CreateDomain
retval <SPAN class="operator token">=</SPAN> convertArcObjectToPythonObject<SPAN class="punctuation token">(</SPAN>gp<SPAN class="punctuation token">.</SPAN>CreateDomain_management<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>gp_fixargs<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>in_workspace<SPAN class="punctuation token">,</SPAN> domain_name<SPAN class="punctuation token">,</SPAN> domain_description<SPAN class="punctuation token">,</SPAN> field_type<SPAN class="punctuation token">,</SPAN> domain_type<SPAN class="punctuation token">,</SPAN> split_policy<SPAN class="punctuation token">,</SPAN> merge_policy<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
File <SPAN class="string token">"c:\program files\arcgis\pro\Resources\arcpy\arcpy\geoprocessing\_base.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">496</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> <SPAN class="operator token"><</SPAN><SPAN class="keyword token">lambda</SPAN><SPAN class="operator token">></SPAN>
<SPAN class="keyword token">return</SPAN> <SPAN class="keyword token">lambda</SPAN> <SPAN class="operator token">*</SPAN>args<SPAN class="punctuation token">:</SPAN> val<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>gp_fixargs<SPAN class="punctuation token">(</SPAN>args<SPAN class="punctuation token">,</SPAN> <SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
arcgisscripting<SPAN class="punctuation token">.</SPAN>ExecuteError<SPAN class="punctuation token">:</SPAN> Failed to execute<SPAN class="punctuation token">.</SPAN> Parameters are <SPAN class="operator token">not</SPAN> valid<SPAN class="punctuation token">.</SPAN>
ERROR <SPAN class="number token">000192</SPAN><SPAN class="punctuation token">:</SPAN> Invalid value <SPAN class="keyword token">for</SPAN> Domain Name
Failed to execute <SPAN class="punctuation token">(</SPAN>CreateDomain<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>
Failed to execute <SPAN class="punctuation token">(</SPAN>AddExtendedCoreFields<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>
Failed at Sunday<SPAN class="punctuation token">,</SPAN> June <SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">2018</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">28</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">14</SPAN> PM <SPAN class="punctuation token">(</SPAN>Elapsed Time<SPAN class="punctuation token">:</SPAN> <SPAN class="number token">1.52</SPAN> seconds<SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
However it creates the domain!
If I run it again knowing the domain exists, same error message.
<SPAN class="keyword token">import</SPAN> os
<SPAN class="keyword token">import</SPAN> errno
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="comment token">#Get user input</SPAN>
gdb_name <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN>
fc_name <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN>
isOBSERVABLEchecked <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN>
isISEXTANTchecked <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#Create the Optional OBSERVABLE domain</SPAN>
<SPAN class="keyword token">if</SPAN> str<SPAN class="punctuation token">(</SPAN>isOBSERVABLEchecked<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">==</SPAN> <SPAN class="string token">'true'</SPAN><SPAN class="punctuation token">:</SPAN>
existingDomains <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>ListDomains<SPAN class="punctuation token">(</SPAN>gdb_name<SPAN class="punctuation token">)</SPAN>
isthere <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">False</SPAN>
<SPAN class="keyword token">for</SPAN> domain <SPAN class="keyword token">in</SPAN> existingDomains<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> domain<SPAN class="punctuation token">.</SPAN>name <SPAN class="operator token">==</SPAN> <SPAN class="string token">'DOM_YES_NO_UNK_NPS2016'</SPAN><SPAN class="punctuation token">:</SPAN>
isthere <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">break</SPAN>
<SPAN class="keyword token">if</SPAN> isthere <SPAN class="operator token">==</SPAN> <SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CreateDomain_management<SPAN class="punctuation token">(</SPAN>gdb_name<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"DOM_YES_NO_UNK_NPS2016"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Is the feature physically observable"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"TEXT"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CODED"</SPAN><SPAN class="punctuation token">)</SPAN>
YESNODict <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN><SPAN class="string token">"Unknown"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="string token">"Unknown"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Yes"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Yes"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"No"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"No"</SPAN><SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">for</SPAN> code <SPAN class="keyword token">in</SPAN> YESNODict<SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddCodedValueToDomain_management<SPAN class="punctuation token">(</SPAN>gdb_name<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"DOM_YES_NO_UNK_NPS2016"</SPAN><SPAN class="punctuation token">,</SPAN> code<SPAN class="punctuation token">,</SPAN> YESNODict<SPAN class="punctuation token">[</SPAN>code<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"DOM_YES_NO_UNK_NPS2016 already exists"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#Create the Optional ISEXTANT domain</SPAN>
<SPAN class="keyword token">if</SPAN> str<SPAN class="punctuation token">(</SPAN>isISEXTANTchecked<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">==</SPAN> <SPAN class="string token">'true'</SPAN><SPAN class="punctuation token">:</SPAN>
existingDomains <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>ListDomains<SPAN class="punctuation token">(</SPAN>gdb_name<SPAN class="punctuation token">)</SPAN>
isthere <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">False</SPAN>
<SPAN class="keyword token">for</SPAN> domain <SPAN class="keyword token">in</SPAN> existingDomains<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> domain<SPAN class="punctuation token">.</SPAN>name <SPAN class="operator token">==</SPAN> <SPAN class="string token">'DOM_YES_NO_UNK_NPS2016'</SPAN><SPAN class="punctuation token">:</SPAN>
isthere <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">break</SPAN>
<SPAN class="keyword token">if</SPAN> isthere <SPAN class="operator token">==</SPAN> <SPAN class="token boolean">False</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CreateDomain_management<SPAN class="punctuation token">(</SPAN>gdb_name<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"DOM_ISEXTANT_NPS2016"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Indicates feature or features that are no longer in existence or partially in existence."</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"TEXT"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CODED"</SPAN><SPAN class="punctuation token">)</SPAN>
ISEXTANTDict <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN><SPAN class="string token">"Unknown"</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="string token">"Unknown"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"True"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"True"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"False"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"False"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Partial"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Partial"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Other"</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"Other"</SPAN><SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">for</SPAN> code <SPAN class="keyword token">in</SPAN> ISEXTANTDict<SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddCodedValueToDomain_management<SPAN class="punctuation token">(</SPAN>gdb_name<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"DOM_ISEXTANT_NPS2016"</SPAN><SPAN class="punctuation token">,</SPAN> code<SPAN class="punctuation token">,</SPAN> ISEXTANTDict<SPAN class="punctuation token">[</SPAN>code<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"DOM_ISEXTANT_NPS2016 already exists"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>As best as I can tell, I have an illegal loop condition that keeps trying to create the first domain whether it exists or not, and the failure stems from the domain name already exists.