Вы говорите, что gp.AddLocations_na вызывает проблему, но она не очевидна из вашего кода.Для отладки добавьте оператор повышение в ваш блок кроме.Это скажет вам, какая строка вызывает ошибку.Вы всегда можете удалить его, когда разберетесь с перегибами.
Похоже, что одинокий я - виновник.Вы передаете его как строку, когда она, вероятно, должна быть переменной класса объектов.Вы можете использовать словарь для хранения имен и переменных.
#store table/feature class names with the variables
facilities_points = {"Armor":Armor, "Bouguenais":Bouguenais, "Chantrerie":Chantrerie}
#note the while loop is superfluous here
while 1:
for i in facilities_points:
try:
gp.MakeServiceAreaLayer_na (network, "Service Area_" + i, "Minutes_S1", "TRAVEL_FROM", "10 20 30 40 50", "SIMPLE_POLYS", "MERGE", "DISKS", "NO_LINES", "OVERLAP", "NO_SPLIT", "", "", "ALLOW_UTURNS", "", "TRIM_POLYS", "200 Meters", "NO_LINES_SOURCE_FIELDS")
gp.AddLocations_na("Service Area_" + i, "Facilities_" + i, facilities_points[i], "", "100 Meters")
gp.Solve_na ("Service Area_" + i, "HALT")
gp.CopyFeatures_management("Service Area_" + i + "/Polygons", "D:/Travaux/NantesMetropole/Traitements/SIG_Final/Modelisation/voiture/test_" + i +".shp")
print "Minutes_S1 done on", i
except:
#this error message tells you nothing about what really happened
print "Error on", i
#Raise the full exception to assist with debugging
#comment it out once the script works
raise
break
В качестве отступления, хотя обработка ошибок - хорошая привычка, на мой взгляд, она редко бывает полезна для этого типа сценариев.Если вы не готовы принять неудачный вызов функции геообработки и продолжить работу, лучше всего позволить сценарию остановиться и вернуться туда, где произошла ошибка.Однако, если вы внедрили протоколирование для захвата трассировок и в тех случаях, когда это выполняется как запланированная задача, тогда блоком исключений будет место для сообщения журнала.