Saya benci bug Anda semua dengan masalah yang sama berulang-ulang tapi saya mengalami masalah baru setiap kali saya membuat sedikit perubahan pada kode. Yang saya lakukan pada kode di bawah ini adalah mengganti nama bidang agar cocok dengan kelas fitur asli. Sekarang tidak berfungsi. Itu memberi saya
<type 'exceptions.RuntimeError'>: ERROR 999999: Error executing function.
Failed to execute (Script).
Saya mencoba menambahkan Try / Kecuali ke kode yang tidak memberi saya pesan kesalahan tetapi tidak memberi saya hasil juga.
Saya tidak yakin apa yang terjadi? Setiap bantuan untuk mencari tahu ini akan sangat dihargai.
import arcpy, os
Try:
roadpath = arcpy.GetParameterAsText(0)
tablepath = arcpy.GetParameterAsText(1)
datapath = os.path.split(tablepath)[0]
tablename = os.path.split(tablepath)[1]
rows = arcpy.SearchCursor(roadpath,"FROMLEFT <> 0 AND TOLEFT <> 0","","STREET_NAME_ID;FROMLEFT;TOLEFT","STREET_NAME_ID A;FROMLEFT A;TOLEFT A")
arcpy.env.workspace = datapath
if arcpy.Exists(tablename):
arcpy.DeleteRows_management(tablename)
else:
arcpy.CreateTable_management(datapath,tablename,roadpath)
arcpy.DeleteField_management(tablename,"SHAPE_Length")
irows = arcpy.InsertCursor(tablename)
first = True
for row in rows:
if first:
first = False
else:
GISID = row.GIS_ID
stid = row.STREET_NAME_ID
fl = row.FROMLEFT
tl = row.TOLEFT
if stid == prev_stid and fl <= prev_tl:
irow = irows.newRow()
irow.GIS_ID = prev_GISID
irow.STREET_NAME_ID = prev_stid
irow.FROMLEFT = prev_fl
irow.TOLEFT = prev_tl
irows.insertRow(irow)
del irow
irow = irows.newRow()
irow.GIS_ID = GISID
irow.STREET_NAME_ID = stid
irow.FROMLEFT = fl
irow.TOLEFT = tl
irows.insertRow(irow)
del irow
prev_GISID = row.GIS_ID
prev_stid = row.STREET_NAME_ID
prev_fl = row.FROMLEFT
prev_tl = row.TOLEFT
del rows, irows
except:
print arcpy.GetMessages()
rows =
keirows
inklusif dalam percobaan ... kecuali blok memberikan pesan kesalahan yang lebih terbuka. Ini juga akan membantu jika Anda dapat menempatkan sampel data dan skrip lengkap di suatu tempat ( minus.com adalah salah satu tempat untuk berbagi publik yang mudah).` `
tablepath
bukantablename
. Ini hanya salah ketik forum atau apakah ini benar-benar seperti itu dalam skrip? Kesalahan menyarankan yang pertama, jadi dapatkah Anda memberikan contoh nilai yang Anda sampaikan ke kedua parameter Anda? Apakah Anda memilikiimport arcpy
baris di bagian atas skrip Anda?Jawaban:
Parameter yang saat ini telah Anda atur seharusnya tidak benar-benar menjadi parameter "output", karena mereka adalah argumen string sederhana untuk metode geoprocessing Anda, bukan output yang sebenarnya.
Ada dua cara untuk melakukannya:
os.path.split
sesuai kebutuhan untuk fungsi geoproses yang Anda gunakan.ToolValidator
kelas alat skrip Anda untuk menetapkan nilainya setelah parameter 2 dan 3 divalidasi.Metode pertama mungkin adalah cara yang lebih mudah - logika ToolValidator rumit untuk dilakukan dengan benar dan sulit di-debug.
EDIT: Sebenarnya ada opsi ketiga yang dapat digunakan untuk tujuan Anda - ini sama dengan metode dua, tetapi alih-alih memodifikasi ToolValidator, panggil
SetParameterAsText
di akhir skrip Anda untuk menetapkan nilai parameter turunan keempat. Saya pernah mengalami masalah dengan SetParameterAsText di masa lalu dalam alat skrip yang digunakan dalam ModelBuilder, tetapi mungkin diperbaiki sekarang.sumber
Saya juga melihat mengomentari semua kode dan mencetak nilai-nilai parameter yang Anda lewati. Selalu baik untuk dimasukkan ke dalam sedikit debugging.
Ini juga praktik yang baik, untuk memeriksa parametsr ketika mereka masuk:
Sesuatu seperti itu, lalu pastikan Anda mencetak variabel agar Anda dapat melihatnya:
arcpy.AddMessage("ID : " + str(Id))
atau
print "ID : " + str(Id)
Dll. Anda perlu tahu bahwa nilai yang masuk bukan sampah, karena Anda akan selalu mengejar Anda.
Menempatkan baris / cur dalam tangkapan percobaan juga merupakan praktik yang baik.
sumber
Saya setuju dengan bla, arah semua parameter Anda harus "input". Juga, Anda menentukan parameter alat 3 tipe data, tabel output, sebagai objek file; coba ini sebagai "tabel" atau "string".
sumber