Về cơ bản, điều mà người ta đang nói, trong Python nói, là nỗ lực của bạn để mở shapefile đã thất bại. Khi một cái gì đó như osgeo.ogr.Open () không thành công, nó thường trả về Không, trong trường hợp của bạn, được gán cho biến "shapefile" của bạn. Khi bạn cố gắng truy cập shapefile sau đó, nó sẽ cho bạn biết rằng shapefile là "noneType" (chứ không phải là loại đối tượng mà osgeo sẽ tạo ra) và các đối tượng noneType không có phương thức GetLayerCount.
Làm thế nào để bạn khắc phục điều này? Trước tiên, hãy kiểm tra lỗi trong mã của bạn - nó sẽ cung cấp cho bạn thông điệp tốt hơn. Cái gì đó như:
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
Vì vậy, bây giờ chúng tôi cần trả lời câu hỏi tại sao shapefile của bạn không tải. Tôi đoán là bạn cần cung cấp đường dẫn đủ điều kiện (nghĩa là "C: \ Users ... \ tl_2009_us_state.shp") vì osgeo không thể tìm thấy shapefile của bạn với đường dẫn hiện được cung cấp. Đó là một linh cảm mặc dù.