আমি পাইথনে ত্রুটি পেয়েছি


190

আমার অজগর প্রোগ্রামে আমি এই ত্রুটিটি পাচ্ছি:

KeyError: 'variablename'

এই কোড থেকে:

path = meta_entry['path'].strip('/'),

কেউ কি দয়া করে ব্যাখ্যা করতে পারেন যে কেন এটি হচ্ছে?


10
Key errorসাধারণত মানে keyঅস্তিত্ব নেই। সুতরাং, আপনি কি নিশ্চিত যে 'পথ' বিদ্যমান?
রানর্যাগ

3
এর সামগ্রীগুলি মুদ্রণ করুন meta_entryএবং আপনি যে চাবিটি চান তা বিদ্যমান রয়েছে তা নিশ্চিত করুন।
মাকোটো

উত্তর:


258

একটি KeyErrorসাধারণত মানে কীটির অস্তিত্ব নেই। সুতরাং, আপনি কি নিশ্চিত যে pathকীটি বিদ্যমান?

অফিসিয়াল পাইথন ডক্স থেকে:

ব্যতিক্রম কী-এরর

বিদ্যমান কীগুলির সেটটিতে ম্যাপিং (অভিধান) কীটি পাওয়া না গেলে উত্থাপিত হয়।

উদাহরণ স্বরূপ:

>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>

সুতরাং, এর সামগ্রীটি মুদ্রণের চেষ্টা করুন meta_entryএবং pathউপস্থিত আছে কি নেই তা যাচাই করুন ।

>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}

বা, আপনি এটি করতে পারেন:

>>> 'a' in mydict
True
>>> 'c' in mydict
False

হুম ... কীভাবে করব? (একটি নুবি হওয়ার জন্য দুঃখিত) অ্যাপ্লিকেশনটি গুগল অ্যাপ ইঞ্জিনে হোস্ট করা হয়েছে এবং এটি তৈরি করে এমন কোনও ফাইলে আমার অ্যাক্সেস নেই।
ডেভিড লিয়াউ

আমার
কোডটিতে

সুতরাং, আপনার পোস্ট path = meta_entry['path'].strip('/'),করা কোডটি এটি আপনার কোড বা ইঞ্জিনের একটি অংশ। যদি এটি ইঞ্জিনের অংশ হয় তবে আমি ভয় করি যে কিছুই করা সম্ভব নয়।
রানার্যাগ

@ লোনাহাংম্যান: কেবলমাত্র করুন print meta_entryএবং এটিতে রয়েছে কিনা তা যাচাই করুন path
রানরাগ

আমি অজগর থেকে বেশ নতুন, আপনি কি আরও বিস্তারিতভাবে ব্যাখ্যা করতে পারেন? কীটপতঙ্গ হওয়ার জন্য দুঃখিত
ডেভিড লিয়াউ

127

আমি কী ত্রুটি মন্তব্যের সাথে সম্পূর্ণ সম্মত। আপনি ব্যতিক্রমগুলি এড়াতে অভিধানের গেট () পদ্ধতিটিও ব্যবহার করতে পারেন । এটি Noneনীচের চিত্রের চেয়ে ডিফল্ট পাথ দিতে ব্যবহৃত হতে পারে ।

>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None

9
খুব প্রাসঙ্গিক .get () মন্তব্যের জন্য +1। LBYL এর পরিবর্তে পাইথন ইএএফপি (পারফরমেন্সের চেয়ে ক্ষমা চাওয়ার চেয়ে সহজ) এর একটি ভাল প্রয়োগের মতো মনে হচ্ছে যা আমি কম পাইথোনিক বলে মনে করি।
নীলস বম

32

ডিকের জন্য, কেবল ব্যবহার করুন

if key in dict

এবং ব্যবহার না

if key in dict.keys()

এটি সময় সাপেক্ষ হবে


5

হ্যাঁ, এটি সম্ভবত অস্তিত্বহীন কী দ্বারা সৃষ্ট।

আমার প্রোগ্রামে, দক্ষতার উদ্বেগের জন্য, আমি এই ত্রুটিটি নিঃশব্দে সেটডেফল্ট ব্যবহার করেছি। এই লাইনটি কতটা দক্ষ তার উপর নির্ভর করে

>>>'a' in mydict.keys()  

আমি পাইথনেও নতুন। আসলে আমি আজ এটি শিখেছি। সুতরাং দক্ষতার অজ্ঞতায় আমাকে ক্ষমা করুন।

পাইথন 3 এ আপনি এই ফাংশনটিও ব্যবহার করতে পারেন,

get(key[, default]) [function doc][1]

বলা হয়ে থাকে যে এটি কখনই কোনও মূল ত্রুটি বাড়িয়ে তুলবে না।


প্রাপ্ত পদ্ধতিটি প্রাচীন, আমি মনে করি এমনকি ১.x ডিক্টও এটি ছিল। তবে আমি নিশ্চিত যে এটি ইতিমধ্যে 2.7 ছিল।
জারজেন এ। এয়ারহার্ড

3

এর অর্থ আপনার অ্যারে আপনি যে কীটি সন্ধান করছেন তা হারিয়ে যাচ্ছে। আমি এটি এমন একটি ফাংশন দিয়ে পরিচালনা করি যা হয় হয় যদি উপস্থিত থাকে তবে মানটি দেয় বা পরিবর্তে এটি একটি ডিফল্ট মান দেয় returns

def keyCheck(key, arr, default):
    if key in arr.keys():
        return arr[key]
    else:
        return default


myarray = {'key1':1, 'key2':2}

print keyCheck('key1', myarray, '#default')
print keyCheck('key2', myarray, '#default')
print keyCheck('key3', myarray, '#default')

আউটপুট:

1
2
#default

7
আরগ ... ভয়ঙ্কর, ভয়াবহ অজস্র কোড পাইথনে পিএইচপি কোডটি লিখবেন না: এটি কোনও অ্যারে নয়, এটি একটি অভিধান (আপনি এটিকে হ্যাশ বলতে পারেন, তবে অ্যারেটি ঠিক আছে)। এবং: ডিক্টসগুলির ইতিমধ্যে আপনার "কীচেক" ফাংশন রয়েছে: "কীচেক ('কী 1', মায়ার্য, '# ডিফল্ট') এর পরিবর্তে আপনি" মাইডিক্ট.জেট ('কী 1', '# ডিফল্ট') "করবেন
এ । এরহার্ড

2

আমি dictনেস্ট দিয়ে পার্স করার সময় এই ত্রুটিটি পেয়েছি for:

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cat:
        print(cats[cat][attr])

ট্রেসব্যাক:

Traceback (most recent call last):
      File "<input>", line 3, in <module>
    KeyError: 'K'

কারণ দ্বিতীয় লুপের cats[cat]পরিবর্তে কেবল হওয়া উচিত cat(কেবল কী কী)

তাই:

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cats[cat]:
        print(cats[cat][attr])

দেয়

black
10
white
8

0

উদাহরণস্বরূপ, এটি যদি একটি নম্বর হয়:

ouloulou={
    1:US,
    2:BR,
    3:FR
    }
ouloulou[1]()

এটা তোলে পুরোপুরি কাজ, কিন্তু যদি তোমরা উদাহরণস্বরূপ ব্যবহার করুন:

ouloulou[input("select 1 2 or 3"]()

এটি কাজ করে না, কারণ আপনার ইনপুটটি স্ট্রিং '1' দেয়। সুতরাং আপনার ব্যবহার করতে হবে ()

ouloulou[int(input("select 1 2 or 3"))]()

0

আপনি যদি পাইথন 3 ব্যবহার করেন তবে আমাদের এটি সহজ করুন

mydict = {'a':'apple','b':'boy','c':'cat'}
check = 'c' in mydict
if check:
    print('c key is present')

আপনার যদি প্রয়োজন হয় অন্য শর্ত need

mydict = {'a':'apple','b':'boy','c':'cat'}
if 'c' in mydict:
    print('key present')
else:
    print('key not found')

গতিশীল কী মানটির জন্য, আপনি চেষ্টা-ব্যতিক্রম ব্লক দিয়েও পরিচালনা করতে পারেন

mydict = {'a':'apple','b':'boy','c':'cat'}
try:
    print(mydict['c'])
except KeyError:
    print('key value not found')mydict = {'a':'apple','b':'boy','c':'cat'}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.