ArcPy komut dosyalarında hata ayıklama?


50

ArcGIS 10'da ArcPy'yi kullanarak birçok Python komut dosyası yazdım ve şimdiye kadar tek hata ayıklama yöntemim kullanarak iletileri coğrafi işlem sonuçları penceresine yazdırmakla sınırlı kalıyor arcpy.AddMessage().

Kırılma noktalarını ayarlamak gibi başka seçenekler var mı?

Jason'ın yöntemi harika çalışıyor. Araç kutunuzda doğrulama gibi bir hata varsa, IDE'niz muhtemelen araç kutuları kodlandığından sorunu tespit edemez. En azından WING tam olarak belirleyemedi.


Belki burada bir seçenek? kod google pyscripter
Brad Nesom

ArcGIS yardım PythonWin ayıklayıcısını nasıl kullanılacağı anlatılır
Regan Sarwas

OS dosya özelliklerinde, .py dosyaları için varsayılan programı PyScripter olarak ayarlamayı denediniz mi?
KiloGeo

Bunu yaparak, işletim sistemine, python betiğimi çalıştırmak istemediğimi söylemek yerine etkin bir şekilde editörde açmak istemem mi?
RyanDalton

Evet doğru. Üzgünüm amacınızı yanlış anladım.
KiloGeo

Yanıtlar:


37

Genellikle Python hata ayıklayıcıları / IDE'leri, Python betiğinin kendisiyle aynı şekilde çalıştığını varsayar; bu nedenle ArcMap.exe'de çalışan bir betiğin hata ayıklamasını yapmak doğru olmaz - mümkün olduğunca bir Python betiğinde bootstrapped GP betiği ortamı yeterli ile hata ayıkla.

Son birkaç yıldır benim için çok iyi işleyen bir yöntem, aracı sadece çağıran ve Python IDE'deki (Wing veya Pythonwin) ana betiğim olarak kullanıp basit bir komut dosyası yazmak ve takımın kesme noktasını koymak. dosya aynı IDE oturumunda da açılır.

Yani temelde bunu yapıyorum:

  1. Komut dosyası aracımda çalışmayan giriş kümesini alın
  2. Basit bir .py dosyasını, aracı çağıran .tbx ile aynı klasörde açın.
  3. IDE'de arayan betiğini ve betiği aracı .py dosyasını açın
  4. Komut dosyası aracı dosyasında kesme noktalarını ayarlama
  5. Arayan komut dosyasını çalıştır

Arayan betiğim genellikle oldukça basittir:

import os
import arcpy
arcpy.ImportToolbox(os.path.join(os.path.dirname(__file__), 'my.tbx'))
arcpy.MyToolThatIsFailing_myalias("inputs", "that", "don't" "work")

ArcMap'te çalışan komut dosyalarında hata ayıklamak için winpdb'yi denedim ama hiç şansım olmadı. Denemek ve iyi çalışmasını istiyorsanız, lütfen bulgularınızı paylaşın.


1
güzel çözüm! deneyeceğim.
George Silva

Winpdb'yi geçmişte başarılı bir şekilde uzun süreçli komut dosyalarında hata ayıklamak için kullandım. winpdb, kurulduktan sonra, şu anda çalışan bağımsız bir komut dosyasına veya "ArcMap" gibi başka bir işlem içindeki teorik olarak bir tanesine "atlamanıza" ve normalde hata ayıklamanıza izin verir. Bu işlemin tamamlanması haftalar sürecek bir senaryoyu kontrol etmek için çok kullanışlıdır. Ancak bir ArcGIS başvuru sürecinde hata ayıklamayı denemedim.
blah238

PyCharm'i tavsiye ederim. büyü gibi çalışır
user39901230

26

Bunu GP seçenekleri iletişim kutusundan değiştirebilirsiniz, sadece editör / hata ayıklayıcı için seçilebildiğiniz çalıştırmayı işaret edin.

GP Ayarları İletişim Kutusu


Bu ArcGIS 10 için yeni bir donanım gibi görünüyor, doğru mu? 9.3 için bu ayar seçeneğini göremiyorum.
RyanDalton

Doğru, 10'da yeni.
Jason Scheirer

9

10 kullanıcı için, kesinlikle en iyi yol, "en iyi cevap" olarak işaretlediğim Jason'ın gönderisiyle. 9.3 kullanıcıları için, Brad'in yayınlanmasında kullanılan ESRI KB Destek talimatlarını izleyebildim .

Nihayetinde, Pyscripter'deki ArcGIS python scriptlerinin varsayılan düzenlemesini elde etmenin anahtarı, * .py dosyalarında biten "kayıtlı dosya türleri" için "eylem" sistemini düzenlemekti (adım # 4). Yeni bir "Düzenle" eylem tipi yarattım ve sonra Pyscripter.exe yolunu dahil ettim. Bunu yaptıktan sonra, varsayılan düzenleme eylemi IDLE yerine Pyscripter'ı başlatmak üzere ayarlandı.

Kullandığım dize (aşağıda gösterilen iletişim kutusunda kesildiği için):

"C:\Program Files\PyScripter\PyScripter.exe" "%1"

görüntü tanımını buraya girin


1
Cevap için +1 ve yine yapabilirsem, yalnızca bir görüntüyü değil, dize eklemek için (metin kopyalamak ve yapıştırmak çok daha kolaydır!).
matt wilkie

7

Bu arcpy ile çalışacaktır bilmiyorum ama deneyebilirsin Pdb :

import pdb; pdb.set_trace()

Burada tarif edilen eclipse'li pydev için benzer bir işlevsellik vardır. Eclipse'i bir sinyal dinleyecek şekilde ayarlarsınız ve bir pydevd.settrace () işlev çağrısı ile tamamen tutulma dışında çalışan kodda tetikleyebilirsiniz. urbansim.org/Documentation/DugugWithEclipse
ako

0

Kodumu hata ayıklamak için bulduğum en düz yol girdilerimi varolan bir veri kümesinin dosya yoluna kodlamak. Örneğin:

import arcpy

# parameters for script
#input1 = arcpy.GetParameterAsText(0) # layer
#input2 = arcpy.GetParameterAsText(1) # folder

# debugging parameters
input1 = r"path/to/your/data.shp"
input2 = r"path/to/your/folder"

Sonuç penceresine ek olarak, python penceresi yardımcı hata mesajları verir ve / veya kod parçacıklarını test etmenize olanak sağlar.

Herhangi bir iyi IDE, bellekte, mevcut kesme noktasına kadar tüm işlemlerinizi yapacak bir hata ayıklama probuna sahiptir. Bununla, verilerle neler olup bittiğini görebilirsiniz. Komut dosyasını duraklatmak istediğiniz kesme noktalarını ayarlayın. Belirli bir yinelemede bir döngüyü durdurmak istiyorsanız koşullu kesme noktalarını kullanın. Ayrıca, Arc sürümlerinizi ve bu sürümlerde hangi fonksiyonların bulunduğunu da bilin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.