أكثر

خطأ في بناء الجملة باستخدام وحدة ArcPy Spatial Analyst في Python

خطأ في بناء الجملة باستخدام وحدة ArcPy Spatial Analyst في Python


أنا جديد جدًا في استخدام Python وأعتقد أني أفتقد شيئًا واضحًا في النص التالي. أستمر في تلقي رسالة "خطأ في بناء الجملة" بغض النظر عن مقدار العبث مع الأسطر القليلة الأولى. أعتقد أن الأمر يتعلق باستدعاء وحدة المحلل المكاني إلى لغة بيثون أثناء التحقق من امتداد المحلل المكاني.

#Script يأخذ مدخلات DEM النقطية ويحدد حدود مستجمعات المياه بناءً على # اتجاه التدفق والتراكم # استيراد وحدة arcpy استيراد arcpy من arcpy.sa import * arcpy.env.overwriteOutput = True # تحقق من امتداد المحلل المكاني arcpy.CheckOutExtension ("Spatial" ") #Specify المدخلات النقطية inDEM = arcpy.GetParameterAsText (0) # حدد نظام إحداثيات الإدخال spatialReference = arcpy.GetParameterAsText (1) # حدد الحد الأدنى لعدد الخلايا التي يُفترض أنها تمثل تيار # (عتبة الخلية) في الحد الأدنى = arcpy.GetParameterAsText (2) جرب: # العملية: Project Raster arcpy.ProjectRaster_management (inDEM، projectDEM، spatialReference) # العملية: Fill fillDEM = Fill (projectDEM) # Process: Flow Direction flowDir = FlowDirection (fillDEM، "NORMAL") # : Flow Accumulation flowAccum = FlowAccumulation (flowDir) # العملية: Raster Calculator outRaster = RasterCalculator ((flowAccum> inMin)) # العملية: النقطية إلى قوس متعدد الخطوط. RasterToPolyline_conversion (outRaster ، polyLines ، "ZERO"، "0"، "SIMPLIFY"، "VALUE") # Process: Feature Vertices To Points arcpy.FeatureVerticesToPoints_management (polyLines، lineVertices، "END") # العملية: Watershed outWatershed = Watershed (flowDir، lineVertices) # العملية: Raster to Polygon arcpy.RasterToPolygon_conversion (outWatershed، waterhedPolygons، "SIMPLIFY"، "VALUE") # تحقق في ملحق Spatial Analyst arcpy.CheckInExtension ("Spatial") # معالجة الأخطاء باستثناء: Arcpy.AddError فشل ("بنجاح" ) arcpy.AddMessage (arcpy.GetMessages ())

لكيحاول:العبارة مكتوبة بأحرف كبيرة ، يجب أن تكون صغيرة -يحاول:


إستعمال

يمكن أن تكون قيم الإدخال موجبة أو سالبة.

إذا كان التقريب مفضلًا على القطع ، أضف 0.5 إدخال نقطي قبل تنفيذ العملية.

الفرق الآخر هو أن التقريب لأسفل ينتج قيم الفاصلة العائمة ، بينما Int ينتج قيم عدد صحيح فقط.

الحد الأقصى للمدى المدعوم للقيم النقطية الصحيحة هو -2،147،483،648 (الحد الأدنى للحجم المحدد بـ -2 31) إلى 2،147،483،647 (الحد الأقصى للحجم المحدد بـ 2 31-1). إذا تم استخدام Int على نقطية ذات فاصلة عائمة تحتوي على خلايا ذات قيم خارج هذا النطاق ، فستكون تلك الخلايا NoData في البيانات النقطية للإخراج.

سيستخدم تخزين البيانات الفئوية (المنفصلة) على هيئة نقطية عددية مساحة قرص أقل بشكل ملحوظ من نفس المعلومات المخزنة كنقطية نقطية عائمة. كلما كان ذلك ممكنًا ، يوصى بتحويل نقطية النقطة العائمة إلى عدد صحيح باستخدام هذه الأداة.

راجع بيئات التحليل والمحلل المكاني للحصول على تفاصيل إضافية حول بيئات المعالجة الجغرافية التي تنطبق على هذه الأداة.


إعادة عرض الخطأ في البرنامج النصي

معلومات الخطأ:
خطأ 000622: فشل تنفيذ (المشروع). المعلمات غير صالحة.
خطأ 000628: لا يمكن تعيين الإدخال في المعلمة out_coor_system.

هنا جزء من البرنامج النصي والمتغيرات المحددة:

أي أفكار حول أين أخطأ هنا؟ أنا أقدر المساعدة !!

إذا كنت تستخدم الإصدار 10.1 ، فإنك تقدم أنظمة الإحداثيات بشكل مختلف. بدلاً من استخدام مرجع لملف prj (لم يعد المجلد موجودًا) ، يمكنك استخدام WKID لنظام إحداثيات الإخراج. في هذه الحالة ، يكون رمز المصنع لـ State Plane South HARN هو 2927. يمكنك إنشاء كائن مرجعي مكاني ولكني اكتشفت أنه يمكنك تشغيله بمجرد توفير WKID.

إذا كنت تستخدم الإصدار 10.1 ، فإنك تقدم أنظمة الإحداثيات بشكل مختلف. بدلاً من استخدام مرجع لملف prj (لم يعد المجلد موجودًا) ، يمكنك استخدام WKID لنظام إحداثيات الإخراج. في هذه الحالة ، يكون رمز المصنع لـ State Plane South HARN هو 2927. يمكنك إنشاء كائن مرجعي مكاني ولكني اكتشفت أنه يمكنك تشغيله بمجرد توفير WKID.

ليس تمثيل سلسلة CS. استخدم كائن المرجع المكاني بدلاً من ذلك ، أي افترض أنك تستخدم arcmap 10.1:

لقد قمت بتغيير الرمز إلى:

arcpy.Project_management (GRADIENT_BAR_PT، GRADIENT_BARH83، 2927، CSTRANS)

معلومات الخطأ:
فشل في التنفيذ. المعلمات غير صالحة.
خطأ 000365: تحويل جغرافي غير صالح.
فشل تنفيذ (المشروع).

المتغير الذي يمثل تحولي الجغرافي هو

CSTRANS = "" NAD_1927_To_NAD_1983_NADCON "،" NAD_1983_To_HARN_WA_OR ""

وهي تعمل عندما أستخدم هذا التحويل في الأداة ، لذلك أعتقد أنه خطأ نحوي ، أو مجرد خطأ في التنسيق. هذه هي التحولات الصحيحة ربما كنت قد أدخلتها بشكل خاطئ بطريقة ما؟


ما هو Arcpy.cim؟

# قم بتعديل قالب اللون والعرض والشرطة لطبقة SolidStroke
symLvl1 = cim_lyr.Renderer.Symbol.Symbol.SymbolLayers [0]
symLvl1.Color.Values ​​= [250 ، 250 ، 40 ، 50]
العرض = 8
ef1 = symLvl1.Effects [0] #Note ، مسافة بادئة أعمق
ef1.DashTemplate = [20، 30]

# قم بتعديل اللون / الشفافية لطبقة SolidFill
symLvl2 = cim_lyr.Renderer.Symbol.Symbol.SymbolLayers [1]
symLvl2.Color.Values ​​= [140، 70، 20، 20]

# ادفع التغييرات مرة أخرى إلى كائن الطبقة
تعريف lyr.set (cim_lyr)

# قم بالإشارة إلى مشروع وخريطة وطبقة باستخدام arcpy.mp
p = arcpy.mp.ArcGISProject ("الحالي")
m = p.listMaps ("مسارات المسار") [0]
lyr = m.listLayers ('Loops') [0]

# إرجاع تعريف CIM للطبقة
cim_lyr = lyr.getDefinition ('V2')

# قم بتعديل قالب اللون والعرض والشرطة لطبقة SolidStroke
symLvl1 = cim_lyr.renderer.symbol.symbol.symbol.symbolLayers [0]
symLvl1.color.values ​​= [250، 250، 40، 50]
symLvl1.width = 8
symLvl1.effects = [arcpy.cim.CIMGeometricEffectDashes ()]
ef1 = symLvl1.effects [0] #Note ، مسافة بادئة أعمق
ef1.dashTemplate = [20، 30]

# قم بتعديل اللون / الشفافية لطبقة SolidFill
symLvl2 = cim_lyr.renderer.symbol.symbol.symbol.symbolLayers [1]
symLvl2.color.values ​​= [140، 70، 20، 20]

# ادفع التغييرات مرة أخرى إلى كائن الطبقة
تعريف lyr.set (cim_lyr)

بواسطة JeffBarrette

شكرا على الإبلاغ! أنت على صواب في وقت متأخر من تطوير 2.4 قمنا بتغيير تنسيق CamelBack لأعضاء الكائن ليكون متوافقًا مع واجهة برمجة التطبيقات المُدارة. لقد فشلت في تحديث المثال 3 واكتشفته. تم تصحيح البرنامج النصي وسيظهر في منشور المساعدة التالي.

السطر المفقود الذي أضفته غير مطلوب إذا كان للرمز تأثير متقطع بالفعل. ما فعله الخط بشكل أساسي هو توليد التأثير. هذا شيء يجب أن تكون حريصًا جدًا عند القيام به. يعرض الفيديو العام لقمة المطورين السطر الذي أضفته. هذا المثال المعين هو حالة استخدام بسيطة ولكن نظرًا لتعقيد إنشاء الكائن حيث يكون للكائنات الجديدة تبعيات على كائنات إضافية ، فمن السهل إنشاء كائنات قد تفشل في التطبيق.


استثناء AssertionError

بدلاً من انتظار تعطل البرنامج في منتصف الطريق ، يمكنك أيضًا البدء بتأكيد في Python. نؤكد أنه تم استيفاء شرط معين. إذا تبين أن هذا الشرط صحيح ، فهذا ممتاز! يمكن أن يستمر البرنامج. إذا تبين أن الشرط خاطئ ، فيمكنك جعل البرنامج يطرح استثناء AssertionError.

ألق نظرة على المثال التالي ، حيث تم التأكيد على أن الكود سيتم تنفيذه على نظام Linux:

إذا قمت بتشغيل هذا الرمز على جهاز Linux ، فسيتم تمرير التأكيد. إذا كنت ستقوم بتشغيل هذا الرمز على جهاز يعمل بنظام Windows ، فستكون نتيجة التأكيد False وستكون النتيجة كما يلي:

في هذا المثال ، يعد طرح استثناء AssertionError هو آخر شيء سيفعله البرنامج. سيتوقف البرنامج ولن يستمر. ماذا لو لم يكن هذا ما تريده؟


هذه هي الصيغة المناسبة لاستخدام Clip in ArcPy:

arcpy.Clip_analysis (in_features، clip_features، out_feature_class)

لذلك يجب أن تكون حلقة for بدلاً من ذلك مثل:

أود أيضًا طباعة () كل سلسلة مسار ملف حتى تتمكن من التحقق من استخدام بناء الجملة بشكل مناسب. الخطوط المائلة العكسية هي أحرف هروب في Python ويمكن أن يكون لها خصائص خاصة عند اتباعها بأحرف رئيسية.

أضع دائمًا حرف r أمام أي سلسلة تحتوي على مسار ملف ، على سبيل المثال r " srvr drv proj gdb.gdb fc" هذا يخبر Python بأنه سلسلة أولية ويتجاهل وظائف الهروب.

انظر الرابط أدناه للحصول على تشبيه ترفيهي حول التعامل مع الخطوط المائلة العكسية في أسماء الملفات.

للقيام بمقاطع متعددة مع أكثر من ميزات مقطع واحد ، يجب عليك أولاً إنشاء قائمة بجميع ميزات المقطع وتكرارها.


ينتج نص Python الخطأ 999999 في وظيفة القصاصة

أحاول كتابة برنامج نصي بلغة Python يأخذ مجلدًا من ملفات الأشكال ، ويحدد إحدى الميزات داخل أحد ملفات الأشكال المضلعة وينشئ مخزنًا مؤقتًا على هذه الميزة. ثم يتم استخدام هذه الميزة لقص جميع ملفات الأشكال داخل المجلد. يتم بعد ذلك إعادة إسقاط جميع ملفات الأشكال وكتابتها في قاعدة بيانات جغرافية.

إنه يعمل لملف الشكل الأول في المجلد وينتج النتيجة التي أريدها ولكن عندما يتكرر إلى ملف الشكل التالي ، فإنه يصل إلى مسافة تصل إلى وظيفة القصاصة ، ثم أحصل على "خطأ 999999: خطأ في تنفيذ الوظيفة. فشل التنفيذ (Clip) ". ها هو الكود:

لقد اختبرت أيضًا إعادة إسقاط كل شيء أولاً ثم القص ولكن ArcGIS لا يسمح بحفظ إخراج إعادة الإسقاط "in_memory". أرغب في احتواء البرنامج ذاتيًا بحيث يمكن استخدامه دون حفظ الملفات الوسيطة محليًا.

تحديث - يعمل البرنامج النصي على ملفات أشكال مضلعة مع الكثير من الميزات ولكن بمجرد أن يتعلق الأمر بملف شكل خط أو نقطة حتى إذا لم يتضمن العديد من الميزات ، يفشل البرنامج النصي. أيه أفكار؟


31 إجابات 31

بناءً على تعليقاتك على منشور orip ، أعتقد أن هذا ما حدث:

  1. لقد قمت بتحرير __init__.py على windows.
  2. أضاف محرر windows شيئًا غير قابل للطباعة ، ربما يكون حرف إرجاع (نهاية السطر في Windows هو CR / LF في نظام unix وهو LF فقط) ، أو ربما CTRL-Z (نهاية ملف windows).
  3. لقد استخدمت WinSCP لنسخ الملف إلى صندوق unix الخاص بك.
  4. يعتقد WinSCP: "هذا ليس نصًا أساسيًا ، سأضع ملحق .bin للإشارة إلى البيانات الثنائية."
  5. __init__.py المفقودة (تسمى الآن __init __. py.bin) تعني أن python لا تفهم مجموعة الأدوات كحزمة.
  6. يمكنك إنشاء __init__.py في الدليل المناسب ويعمل كل شيء. ؟

للاستيراد يمشي من خلال الدلائل الخاصة بك ، يجب أن يحتوي كل دليل على ملف __init__.py.

واجهت شيئًا مشابهًا جدًا عندما قمت بهذا التمرين في LPTHW لم أستطع أبدًا جعل Python تدرك أن لدي ملفات في الدليل الذي كنت أتصل منه. لكنني تمكنت من جعله يعمل في النهاية. ما فعلته وما أوصي به هو تجربة هذا:

(ملاحظة: من رسالتك الأولية ، أفترض أنك تستخدم جهازًا يستند إلى * NIX وتقوم بتشغيل الأشياء من سطر الأوامر ، لذا فإن هذه النصيحة مخصصة لذلك. منذ أن قمت بتشغيل Ubuntu ، هذا ما فعلته)

1) قم بتغيير الدليل (cd) إلى الدليل في الاعلى الدليل حيث توجد ملفاتك. في هذه الحالة ، تحاول تشغيل ملف mountain.py ، وتحاول استدعاء الوحدة النمطية toolkit.interface.py ، الموجودة في أدلة منفصلة. في هذه الحالة ، ستنتقل إلى الدليل الذي يحتوي على مسارات لكلا هذين الملفين (أو بعبارة أخرى ، أقرب دليل تشترك فيه مسارات هذين الملفين). وهو في هذه الحالة دليل مجموعة الأدوات.

2) عندما تكون في دليل takeit ، أدخل هذا السطر من التعليمات البرمجية في سطر الأوامر الخاص بك:

يؤدي هذا إلى ضبط PYTHONPATH على "." ، وهو ما يعني أساسًا أن PYTHONPATH الخاص بك سيبحث الآن عن أي ملفات يتم استدعاؤها داخل الدليل الذي تتواجد فيه حاليًا ، (وأكثر من ذلك ، في فروع الدليل الفرعي من الدليل الذي أنت فيه. لذا فهو لا يبحث فقط في دليلك الحالي ، ولكن في جميع الدلائل الموجودة فيه في دليلك الحالي).

3) بعد أن تقوم بتعيين PYTHONPATH في الخطوة أعلاه ، قم بتشغيل الوحدة النمطية الخاصة بك من دليلك الحالي (دليل مجموعة الأدوات). يجب أن تعثر بايثون الآن على الوحدات التي حددتها وتحمّلها.


الدورات المخصصة و # 038 التوجيه

طول المسار: عامل

موقع: عبر الإنترنت / ملبورن CBD

تاريخ التدريب التالي: الرجاء التواصل معنا

التكلفة (باستثناء ضريبة السلع والخدمات):

يرجى الاتصال بنا للحصول على عروض أسعار مخصصة و / أو في الموقع

يبدأ التوجيه بسعر 180 دولارًا في الساعة (3 ساعات على الأقل) أو 1350 دولارًا في اليوم

سواء كنت & # 8217 جديدًا تمامًا في نظم المعلومات الجغرافية أو على دراية جيدة وتتطلع إلى الارتقاء بالمهارات ، فإن فريق التدريب Spatial Vision & # 8217s قد جعلك مغطى.

يمكن لـ Spatial Vision إنشاء دورة تدريبية مخصصة لتناسب احتياجاتك التدريبية أو احتياجات مؤسستك # 8217. جميع المدربين لدينا هم متخصصون ومستشارون معتمدون بدرجة عالية ، مما يساعد الأفراد والمؤسسات الأخرى على تسخير قوة البيانات واتخاذ الخطوة التالية في رحلة نظم المعلومات الجغرافية الخاصة بهم.

نقدم أيضًا خدمات التوجيه على أساس كل ساعة أو يوميًا لمساعدة الأفراد في متطلبات التدريب المحددة.

ما & # 8217s المشاركة

تم تصميم الدورات التدريبية المخصصة لمساعدة عمليات عملك & # 8217 باستخدام البيانات الجغرافية المكانية لتطوير أمثلة عملية. يتعلم المشاركون ويمارسون عمليات نظم المعلومات الجغرافية الأساسية التي تتماشى مع مؤسستهم.

تعمل دوراتنا على بناء كفاءات الأعمال من خلال تعلم الموظفين لأفضل الممارسات والأساليب المفضلة ، مما يضمن اتباع إدارة البيانات الجيدة وإدارة البيانات ضمن عملية موحدة. تتضمن كل دورة:

  • أمثلة عملية مصممة لتعظيم أهداف التعلم ذات الصلة بالمشاركين في الدورة
  • أوراق مرجعية لمساعدة المشاركين في التدريبات العملية وتصبح ملاحظات قيمة لاستخدامها في المستقبل
  • يتم أيضًا توفير عروض PowerPoint التقديمية مع ملاحظات ونصائح موجزة وكتيبات ورقية لمحتوى الدورة لجميع المشاركين

الذي ينبغي أن يحضر

تعتبر الدورة التدريبية المخصصة مفيدة بشكل خاص للمشاركين الذين لديهم مسؤوليات مباشرة لتخطيط وتنفيذ نظم المعلومات الجغرافية على المستوى التشغيلي.

سيكون مفيدًا بنفس القدر لأولئك الذين يقومون بالفعل بدور نظم المعلومات الجغرافية ، وتحديداً أولئك الذين يدعمون وظائف نظم المعلومات الجغرافية ، حتى يتمكنوا من فهم أفضل لكيفية مساهمة أنشطتهم في نمو نضج عملية نظم المعلومات الجغرافية.


3.2.4 استرجاع السجلات باستخدام استعلام مكاني

يعد تطبيق تعبير SQL على مؤشر البحث مفيدًا فقط لاستعلامات السمات ، وليس للاستعلامات المكانية. على سبيل المثال ، يمكنك بسهولة فتح مؤشر بحث في جميع المقاطعات المسماة "Lincoln" باستخدام تعبير SQL ، ولكن البحث عن جميع المقاطعات التي تمس نهر المسيسيبي أو تتضمنه يتطلب أسلوبًا مختلفًا. للحصول على مجموعة فرعية من السجلات بناءً على معيار مكاني ، تحتاج إلى استخدام أداة المعالجة الجغرافية Select Layer By Location.

تعرض بعض قواعد البيانات العلائقية مثل SQL Server أنواع البيانات المكانية التي علبة أن يتم الاستعلام عنها مكانيًا باستخدام SQL. لا يزال دعم هذه الأنواع المكانية في ArcGIS في مرحلة النضج ، وفي هذه الدورة التدريبية ، سنفترض أن طريقة عمل استعلام مكاني هي من خلال Select Layer By Location. نظرًا لأننا لا نستخدم ArcSDE ، فهذا صحيح بالفعل.

لنفترض أنك تريد إنشاء قائمة بجميع الولايات التي تتلامس حدودها مع وايومنغ. كما رأينا في القسم السابق باستخدام أداة Select Layer By Attribute ، ستعيد أداة Select Layer By Location طبقة ميزة تحتوي على الميزات التي تلبي معايير الاستعلام. هناك شيء واحد لم نذكره في القسم السابق وهو أنه يمكن فتح مؤشر البحث ليس فقط في فئات الميزات ، ولكن أيضًا على طبقات الميزة. مع وضع ذلك في الاعتبار ، إليك مجموعة من الخطوات التي قد يتخذها المرء لإنتاج قائمة بجيران وايومنغ:

  1. استخدم Select Layer By Attribute في فئة معالم الحالة لإنشاء طبقة معالم من وايومنغ فقط. دعنا نسمي هذا طبقة Selection State.
  2. استخدم Select Layer By Location في فئة معالم الحالات لإنشاء طبقة معالم من تلك الحالات فقط التي تلمس طبقة حالة التحديد. لنسمي هذا طبقة الجيران.
  3. افتح مؤشر البحث في طبقة الجيران. سيشمل المؤشر فقط وايومنغ والحالات التي تلمسها ، لأن طبقة الجيران هي التحديد المطبق في الخطوة 2 أعلاه. تذكر أن طبقة المعالم هي مجرد مجموعة من السجلات المحفوظة في الذاكرة.

يوجد أدناه بعض التعليمات البرمجية التي تطبق الخطوات المذكورة أعلاه.

يمكنك الاختيار من بين العديد من العوامل المكانية عند تشغيل SelectLayerByLocation. يستخدم الكود أعلاه "BOUNDARY_TOUCHES". العلاقات الأخرى المتاحة هي "INTERSECT" و "WITHIN A DISTANCE" (قد يوفر لك خطوة تخزين مؤقت) و "CONTAINS" و "CONTAINED_BY" وغيرها.

لاحظ أن كائن الصف "row" يُرجع حقلاً واحدًا فقط ("NAME") ، والذي يتم الوصول إليه باستخدام موضع الفهرس الخاص به في قائمة الحقول. نظرًا لوجود حقل واحد فقط ، فإن هذا الفهرس هو 0 ، ويبدو التركيب كما يلي: الصف [0]. بمجرد فتح مؤشر البحث في السجلات المحددة ، يمكنك القيام بأي إجراء تريده عليها. يقوم الكود أعلاه فقط بطباعة اسم الحالة ، ولكن على الأرجح سترغب في تلخيص قيم السمات أو تحديثها. ستتعلم كيفية كتابة قيم السمات لاحقًا في هذا الدرس.

تنظيف طبقات المعالم والمؤشرات

لاحظ أنه يتم حذف طبقات المعالم باستخدام أداة الحذف. هذا لأن طبقات المعالم يمكنها الحفاظ على أقفال البيانات الخاصة بك ، مما يمنع التطبيقات الأخرى من استخدام البيانات حتى يتم الانتهاء من البرنامج النصي الخاص بك. من المفترض أن يقوم Arcpy بتنظيف طبقات المعالم في نهاية البرنامج النصي ، ولكن من الجيد حذفها بنفسك في حالة عدم حدوث ذلك أو في حالة حدوث عطل. في الأمثلة أعلاه ، ستلتقط كتلة الاستثناءات ، ثم يستمر البرنامج النصي ويحذف طبقتين من المعالم.

يمكن للمؤشرات أيضًا الحفاظ على أقفال البيانات. كما ذكرنا سابقًا ، عبارة "مع" ينبغي تنظيف المؤشر لك تلقائيًا. ومع ذلك ، وجدنا أنه ليس دائمًا ، ملاحظة يبدو أنها مدعومة بهذا الدعاية المغلوطة من توثيق Esri لفئة arcpy.da.SearchCursor:

تدعم مؤشرات البحث أيضًا العبارات لإعادة تعيين التكرار والمساعدة في إزالة الأقفال. ومع ذلك ، فإن استخدام عبارة del لحذف الكائن أو التفاف المؤشر في دالة لجعل كائن المؤشر يخرج عن النطاق يجب أن يؤخذ في الاعتبار للحماية من جميع حالات القفل.

هناك نقطة أخيرة يجب ملاحظتها حول هذا الرمز الذي ينظف طبقات الميزة والمؤشر وهي أنه مضمن داخل ملف أخيرا منع. يتم استخدام هذا البناء من حين لآخر مع try and except لتعريف الكود الذي يجب تنفيذه بغض النظر عما إذا كانت العبارات في كتلة try تعمل بنجاح أم لا. لفهم فائدة أخيرًا ، تخيل ما إذا كنت قد وضعت عبارات التنظيف هذه بدلاً من ذلك في نهاية كتلة try. إذا حدث خطأ في مكان ما فوق تلك النقطة في كتلة المحاولة - ليس من الصعب تخيله ، أليس كذلك؟ - لن يتم تنفيذ باقي كتلة try ، تاركًا طبقات المعالم والمؤشر في الذاكرة. سيواجه التشغيل اللاحق للبرنامج النصي ، بعد إصلاح الخطأ ، مشكلة جديدة: لن يتمكن البرنامج النصي من إنشاء طبقة المعالم المخزنة في selectStatesLayer لأنها موجودة بالفعل. بمعنى آخر ، لن يتم تشغيل عبارات التنظيف إلا إذا تم تشغيل باقي النص البرمجي بنجاح.

هذا الموقف هو المكان الذي يكون فيه البيان الأخير مفيدًا بشكل خاص. سيتم تشغيل الكود الموجود في الكتلة النهائية بغض النظر عما إذا كان هناك شيء ما في كتلة المحاولة يؤدي إلى حدوث عطل. (في حالة مواجهة خطأ ما ، سيتم تنفيذ الكود النهائي بعد رمز الاستثناء.) وبالتالي ، أثناء قيامك بتطوير الكود الخاص بك باستخدام طبقات الميزة و / أو المؤشرات ، فمن المستحسن تضمين عبارات التنظيف هذه في النهاية منع.

بناء الجملة البديل

يتطلب تنفيذ أدوات Select Layer By Attribute / Location بنية مختلفة في الإصدارات السابقة من ArcGIS. لم تقم الأدوات بإرجاع طبقة ميزة وبدلاً من ذلك طلبت منك أولاً إنشاء طبقة الميزة بنفسك باستخدام أداة تكوين طبقة الميزات. دعنا نلقي نظرة على هذا المثال نفسه الذي تم إكماله باستخدام بناء الجملة هذا:

لاحظ أن أول جملة MakeFeatureLayer تأخذ فئة Boundaries كمدخلات وتنتج كإخراج طبقة معالم يمكن الرجوع إليها في بقية النص باستخدام اسم "AllStatesLayer". وبالمثل ، فإن العبارة التالية تنشئ طبقة معالم أخرى من فئة معالم الحدود ، وهذه الطبقة تطبق شرط أين لتقييد الميزات المضمنة في وايومنغ فقط. ستحمل طبقة المعالم هذه اسم "SelectionStateLayer". كان إنشاء طبقات المعالم هذه ضروريًا في بناء الجملة القديم هذا لأن أدوات Select Layer By Attribute / Location ستتعرف فقط على طبقات المعالم ، وليس فئات المعالم ، كمدخلات صالحة.

بينما نجد أن بناء الجملة هذا غريب بعض الشيء وأقل بديهية من تلك الموضحة في بداية هذا القسم ، إلا أنها لا تزال تعمل وقد تصادفها عند عرض البرامج النصية للآخرين.

القراءة المطلوبة

قبل أن تمضي قدمًا ، قم بفحص الصفحات المرجعية للأداة التالية. انتبه بشكل خاص إلى قسمي "الاستخدام" و "نموذج التعليمات البرمجية".


شاهد الفيديو: Python لغة البايثون بالعربي للمبتدئين