ดังนั้นโดยพื้นฐานแล้วสิ่งที่เราพูดใน Python นั้นคือความพยายามในการเปิด Shapefile ของคุณล้มเหลว เมื่อสิ่งที่ชอบ osgeo.ogr.Open () ล้มเหลวก็มักจะส่งกลับไม่มีซึ่งในกรณีของคุณได้รับมอบหมายให้ตัวแปร "shapefile" ของคุณ เมื่อคุณพยายามเข้าถึง shapefile ในภายหลังมันจะบอกคุณว่า shapefile คือ "NoneType" (แทนที่จะเป็นประเภทของวัตถุที่ osgeo สร้างขึ้น) และวัตถุ NoneType นั้นไม่มีเมธอด GetLayerCount
คุณจะแก้ไขได้อย่างไร ก่อนอื่นให้ทดสอบข้อผิดพลาดในรหัสของคุณซึ่งจะทำให้ข้อความดีขึ้น สิ่งที่ต้องการ:
import osgeo
import osgeo.ogr
try:
shapefile = osgeo.ogr.Open("tl_2009_us_state.shp")
if shapefile: # checks to see if shapefile was successfully defined
numLayers = shapefile.GetLayerCount()
else: # if it's not successfully defined
print "Couldn't load shapefile"
except: # Seems redundant, but if an exception is raised in the Open() call,
# # you get a message
print "Exception raised during shapefile loading"
# if you want to see the full stacktrace - like you are currently getting,
# then you can add the following:
raise
ดังนั้นตอนนี้เราต้องตอบคำถามว่าทำไมรูปร่างของคุณจึงไม่โหลด ฉันเดาว่าคุณต้องระบุเส้นทางที่ผ่านการรับรองอย่างสมบูรณ์ (เช่น "C: \ Users ... \ tl_2009_us_state.shp") เนื่องจาก osgeo ไม่สามารถหา shapefile ของคุณด้วยเส้นทางที่ให้ไว้ในปัจจุบัน แม้ว่าจะเป็นลางสังหรณ์