'ননটাইপ' বস্তুর কোনও বৈশিষ্ট্য নেই


10

আমি পাইথন জিওপ্যাটিয়াল প্রোগ্রামিংয়ে নতুন। আমি নিম্নলিখিত স্ক্রিপ্টটি চালিয়েছি এবং ত্রুটিযুক্ত বার্তাটি পেয়েছি

>>> import osgeo
>>> import osgeo.ogr
>>> shapefile = osgeo.ogr.Open("tl_2009_us_state.shp")
>>> numLayers = shapefile.GetLayerCount()

Traceback (most recent call last):   
    File "<pyshell#5>", line 1, in <module>
    numLayers = shapefile.GetLayerCount() AttributeError: 'NoneType' object has no attribute 'GetLayerCount'

আপনার কোড স্থানীয়ভাবে চেষ্টা করেছেন এবং এটি কাজ করে। সুতরাং, আপনি জিডিএল এর কোন সংস্করণ ইনস্টল করেছেন?
ক্রিশন

স্ক্রিপ্টটি আপনার শেফফাইল ডেটা অ্যাক্সেস করতে পারে নি। দয়া করে অজগর স্ক্রিপ্টটি আপনার ফোল্ডারের মধ্যে tl_2009_us_state.shpফাইল হিসাবে সংরক্ষণ করুন ie
কালেবজে

উত্তর:


17

তাই মূলত, পাইথনের ভাষায় এটি যা বলছে, তা হ'ল শেফফাইলটি খোলার আপনার প্রচেষ্টা ব্যর্থ হয়েছিল। যখন osgeo.ogr.Open () এর মতো কিছু ব্যর্থ হয় তখন এটি সাধারণত কিছুই দেয় না, যা আপনার ক্ষেত্রে আপনার ভেরিয়েবল "শেফফাইল" হিসাবে অর্পিত হয়। আপনি পরে শেফফাইলে অ্যাক্সেস করার চেষ্টা করার পরে, এটি আপনাকে জানায় যে শেফফাইলটি "ননটিটাইপ" (ওজিজো যে ধরণের বস্তু তৈরি করেছিল তার চেয়ে বরং) এবং ননটাইপ অবজেক্টগুলিতে গেটলায়ারকাউন্ট পদ্ধতি নেই।

আপনি কিভাবে এই ঠিক করব? প্রথমে আপনার কোডে ত্রুটির জন্য পরীক্ষা করুন - এটি আপনাকে আরও ভাল বার্তা দেবে। কিছুটা এইরকম:

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

সুতরাং, এখন আপনার শ্যাপ ফাইলটি কেন লোড হচ্ছে না এমন প্রশ্নের উত্তর আমাদের দেওয়া দরকার। আমার ধারণাটি হ'ল আপনাকে পুরোপুরি যোগ্য পথ (যেমন, "সি: \ ব্যবহারকারী ... l tl_2009_us_state.shp") সরবরাহ করা প্রয়োজন কারণ ওসিজিও আপনার প্রদত্ত পথটি আপনার শেফফাইলটি খুঁজে পাচ্ছে না। যদিও এটি একটি কুঁচক।


1
না, এটি মোটেই "পাইথন স্পিক" নয়। মাইকের নীচে যেমন বলা হয়েছে, কোনওটি না ফেরার পরিবর্তে, এই কাজটিই osoo.ogr এর করা উচিত: "IOError [সংক্ষিপ্ত বিবরণ]"।
স্যাজিলি

দুঃখিত, আমি যা বলার চেষ্টা করছিলাম তা হ'ল "ননটাইপ" অবজেক্টটির কোনও 'গেটলায়ারকাউন্ট' নেই "একটি দুর্দান্ত স্ট্যান্ডার্ড পাইথন ত্রুটি বার্তা যা প্রায়শই ঘটে যখন আপনি কোনও বস্তু নির্ধারিত হওয়ার প্রত্যাশা করেন যে কারণেই হোক না কেন অর্পণ করা। দুঃখিত এটি পরিষ্কার ছিল না।
নিকসান

7

@ নিক এর উত্তর সঠিক: "ননটাইপ" এর অর্থ হল ডেটা উত্সটি খোলা যায় নি। ওজিআর (এবং জিডিএল) ব্যতিক্রমগুলি সাধারণত তাদের যেখানে করা উচিত তা উত্থাপন ogr.UseExceptions()করে না এবং দুর্ভাগ্যক্রমে কার্যকর কিছু করতে পারে বলে মনে হয় না। প্রকৃতপক্ষে যথাযথ ব্যতিক্রমগুলি উত্থাপন করতে এখানে আমার স্বাভাবিক কোড ব্লকটি রয়েছে:

from osgeo import ogr

# Change this to your OGR data source
ds_fname = r'C:\temp\tl_2009_us_state.shp'

ds = ogr.Open(ds_fname)
if not ds:
    raise IOError("Could not open '%s'"%ds_fname)

numLayers = ds.GetLayerCount()
...

1

আমি এর আগেও এই ত্রুটির মুখোমুখি হয়েছি এবং এত দিন ধরে আটকে আছি। আমি এটি একটি ভিন্ন শেফফিল ব্যবহার করে কাজ করতে পেরেছি। ইউএস টাইগার শেফফাইল অবশ্যই দূষিত হয়েছে বা কিছু হয়েছে। আমি এখানে gdal1.6 ব্যবহার করছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.