खोज…


परिचय

यहां स्टैक ओवरफ्लो में हम अक्सर डुप्लिकेट को उसी त्रुटियों के बारे में बात करते हुए देखते हैं: "ImportError: No module named '??????' , SyntaxError: invalid syntax या NameError: name '???' is not defined । यह उन्हें कम करने और लिंक करने के लिए कुछ दस्तावेज़ीकरण करने का प्रयास है।

इंडेंटेशन एरर्स (या इंडेंटेशन सिंटेक्स एरर्स)

अधिकांश अन्य भाषाओं में इंडेंटेशन अनिवार्य नहीं है, लेकिन पायथन (और अन्य भाषाओं में: फोरट्रान, मेकफाइल्स, व्हॉट्सस्पेस (गूढ़ भाषा), आदि के शुरुआती संस्करण) यह मामला नहीं है, अगर आप दूसरी भाषा से आते हैं, तो क्या भ्रमित हो सकता है यदि आप एक उदाहरण से अपने खुद के लिए कोड कॉपी कर रहे थे, या बस अगर आप नए हैं।

IndentationError / SyntaxError: अप्रत्याशित इंडेंट

यह अपवाद तब उठाया जाता है जब बिना किसी कारण के इंडेंटेशन स्तर बढ़ जाता है।

उदाहरण

यहाँ स्तर बढ़ाने का कोई कारण नहीं है:

पायथन 2.x 2.0 2.7
 print "This line is ok"
     print "This line isn't ok"
अजगर 3.x 3.0
 print("This line is ok")
     print("This line isn't ok")

यहां दो त्रुटियां हैं: अंतिम एक और यह कि इंडेंटेशन किसी इंडेंटेशन स्तर से मेल नहीं खाता है। हालाँकि सिर्फ एक दिखाया गया है:

पायथन 2.x 2.0 2.7
 print "This line is ok"
  print "This line isn't ok"
अजगर 3.x 3.0
 print("This line is ok")
  print("This line isn't ok")

IndentationError / SyntaxError: unindent किसी भी बाहरी indentation level से मेल नहीं खाता है

लगता है कि आप पूरी तरह से एकमत नहीं थे।

उदाहरण

पायथन 2.x 2.0 2.7
def foo():
    print "This should be part of foo()"
   print "ERROR!"
print "This is not a part of foo()"
अजगर 3.x 3.0
 print("This line is ok")
  print("This line isn't ok")

अभिस्थापन त्रुटि: किसी अभिस्थापन अवरोध की संभावना

एक बृहदान्त्र (और फिर एक नई लाइन) के बाद इंडेंटेशन स्तर बढ़ाना पड़ता है। यह त्रुटि तब होती है जब ऐसा नहीं हुआ।

उदाहरण

if ok:
doStuff()

नोट : कीवर्ड pass उपयोग करें (जो पूरी तरह से कुछ भी नहीं करता है) बस एक if , else , except , class , method या definition method , लेकिन यह नहीं कहेंगे कि क्या होगा यदि कॉल / स्थिति सही है (लेकिन बाद में, या मामले में करें) except : बस कुछ नहीं):

def foo():
    pass

IndentationError: इंडेंटेशन में टैब और रिक्त स्थान का असंगत उपयोग

उदाहरण

def foo():
    if ok:
      return "Two != Four != Tab"
        return "i dont care i do whatever i want"

इस त्रुटि से कैसे बचें

टैब का उपयोग न करें। यह PEP8 , पायथन के लिए स्टाइल गाइड द्वारा हतोत्साहित किया गया है।

  1. इंडेंटेशन के लिए 4 रिक्त स्थान का उपयोग करने के लिए अपने संपादक को सेट करें।
  2. एक खोज करें और 4 टैब के साथ सभी टैब को बदलने के लिए बदलें।
  3. सुनिश्चित करें कि आपका संपादक 8 स्थानों के रूप में टैब प्रदर्शित करने के लिए सेट है, ताकि आप आसानी से उस त्रुटि को महसूस कर सकें और उसे ठीक कर सकें।

यदि आप अधिक सीखना चाहते हैं तो इस प्रश्न को देखें।

TypeErrors

ये अपवाद तब होते हैं जब किसी वस्तु का प्रकार अलग होना चाहिए

TypeError: [परिभाषा / विधि] लेता है? स्थैतिक तर्क लेकिन दिया गया था

एक फ़ंक्शन या विधि को उन लोगों की तुलना में अधिक (या कम) तर्कों के साथ बुलाया गया था जो इसे स्वीकार कर सकते हैं।

उदाहरण

यदि अधिक तर्क दिए जाते हैं:

def foo(a): return a
foo(a,b,c,d) #And a,b,c,d are defined

यदि कम तर्क दिए जाते हैं:

def foo(a,b,c,d): return a += b + c + d
foo(a) #And a is defined

नोट : यदि आप अज्ञात संख्या में तर्कों का उपयोग करना चाहते हैं, तो आप *args या **kwargs उपयोग कर सकते हैं। देखें * आर्ग्स और ** क्वार्ग्स


TypeError: असमर्थित ऑपरेंड प्रकार (ओं) के लिए [operand]: '???' तथा '???'

ऑपरेंड के आधार पर कुछ प्रकारों को एक साथ संचालित नहीं किया जा सकता है।

उदाहरण

उदाहरण के लिए: + का उपयोग संक्षिप्त और जोड़ने के लिए किया जाता है, लेकिन आप दोनों प्रकारों में से किसी का भी उपयोग नहीं कर सकते। उदाहरण के लिए, एक बनाने की कोशिश कर set श्रृंखलाबद्ध (द्वारा + ing) 'set1' और 'tuple1' त्रुटि देता है। कोड:

set1, tuple1 = {1,2}, (3,4)
a = set1 + tuple1

कुछ प्रकार (जैसे: int और string ) दोनों का उपयोग + लेकिन अलग-अलग चीजों के लिए:

b = 400 + 'foo'

या उनका उपयोग किसी चीज़ के लिए भी नहीं किया जा सकता है:

c = ["a","b"] - [1,2]

लेकिन आप उदाहरण के लिए एक int एक float जोड़ सकते हैं:

d = 1 + 1.0

त्रुटि प्रकार: '???' ऑब्जेक्ट iterable / subscriptable नहीं है:

एक वस्तु iterable होने के लिए यह शून्य से शुरू अनुक्रमिक अनुक्रमित ले जा सकते हैं जब तक अनुक्रमित अब मान्य नहीं हैं और एक IndexError उठाया है (अधिक तकनीकी रूप से: यह एक होना आवश्यक है __iter__ विधि है जो एक रिटर्न __iterator__ , या जो एक को परिभाषित करता है __getitem__ विधि है कि करता है जो पहले बताया गया था)।

उदाहरण

यहाँ हम कह रहे हैं कि bar का शून्य आइटम है। बकवास:

foo = 1
bar = foo[0]

यह एक अधिक असतत संस्करण है: इस उदाहरण के for x को amount[0] सेट करने की कोशिश करता है amount[0] , एक पुनरावृत्त में पहला आइटम लेकिन यह नहीं हो सकता क्योंकि राशि एक int है:

amount = 10
for x in amount: print(x)

त्रुटि प्रकार: '???' वस्तु कॉल करने योग्य नहीं है

आप एक चर को परिभाषित कर रहे हैं और इसे बाद में कॉल कर रहे हैं (जैसे आप किसी फ़ंक्शन या विधि के साथ क्या करते हैं)

उदाहरण

foo = "notAFunction"
foo()

NameError: नाम '???' परिभाषित नहीं है

तब उठाया जाता है जब आपने एक चर, विधि या फ़ंक्शन का उपयोग करने की कोशिश की है जो कि आरंभीकृत नहीं है (कम से कम पहले नहीं)। दूसरे शब्दों में, यह तब उठाया जाता है जब एक अनुरोधित स्थानीय या वैश्विक नाम नहीं मिलता है। यह संभव है कि आप वस्तु के नाम को भूल गए या कुछ import करना भूल गए। इसके अलावा शायद यह एक और दायरे में है। हम उन्हें अलग-अलग उदाहरणों से कवर करेंगे।


यह कोड में कहीं भी परिभाषित नहीं है

यह संभव है कि आप इसे शुरू करना भूल गए, खासकर अगर यह एक स्थिर है

foo   # This variable is not defined
bar() # This function is not defined

शायद यह बाद में परिभाषित किया गया है:

baz()

def baz():
    pass

या यह एड import नहीं था:

#needs import math

def sqrt():
    x = float(input("Value: "))
    return math.sqrt(x)

पायथन स्कोप और लेग नियम:

तथाकथित लेग नियम नियम पाइथन स्कोप के बारे में बात करता है। यह नाम विभिन्न प्राथमिकताओं पर आधारित है, जो संवाददाता प्राथमिकताओं द्वारा आदेशित है:

Local → Enclosed → Global → Built-in.
  • एल ocal: चर एक समारोह में वैश्विक या सौंपा नहीं घोषित किया।
  • nclosing: चर एक फ़ंक्शन में परिभाषित किया गया है जो किसी अन्य फ़ंक्शन के अंदर लपेटा जाता है।
  • जी लोबाल: चर को वैश्विक घोषित किया गया, या किसी फ़ाइल के शीर्ष-स्तर पर सौंपा गया।
  • B uilt-in: वेरिएबल्स को अंतर्निहित नाम मॉड्यूल में रखा गया है।

उदाहरण के तौर पे:

for i in range(4):
    d = i * 2
print(d)

d संवेदी है क्योंकि लूप के for कोई नया स्कोप नहीं है, लेकिन अगर ऐसा हुआ, तो हमें एक त्रुटि होगी और इसका व्यवहार निम्न के जैसा होगा:

def noaccess():
    for i in range(4):
        d = i * 2
noaccess()
print(d)

पायथन कहते हैं NameError: name 'd' is not defined

अन्य त्रुटियां

AssertError

assert वक्तव्य लगभग हर प्रोग्रामिंग भाषा में मौजूद है। जब तुम करोगे:

assert condition

या:

assert condition, message

यह इसके बराबर है:

if __debug__:
    if not condition: raise AssertionError(message)

निबंध में एक वैकल्पिक संदेश शामिल हो सकता है, और जब आप डीबगिंग कर लेते हैं, तो आप उन्हें अक्षम कर सकते हैं।

नोट : बिल्ट-इन वैरिएबल डिबग सामान्य परिस्थितियों में सही है, ऑप्टिमाइज़ेशन का अनुरोध करने पर गलत (कमांड लाइन विकल्प -ओ)। डिबग करने के लिए असाइनमेंट अवैध हैं। इंटरप्रेटर शुरू होने पर अंतर्निहित चर के लिए मूल्य निर्धारित किया जाता है।

KeyboardInterrupt

उपयोगकर्ता द्वारा बाधा कुंजी दबाए जाने पर त्रुटि, सामान्य रूप से Ctrl + C या डेल

ZeroDivisionError

आपने 1/0 की गणना करने की कोशिश की जो अपरिभाषित है। संख्या के विभाजकों को खोजने के लिए यह उदाहरण देखें:

पायथन 2.x 2.0 2.7
div = float(raw_input("Divisors of: "))
for x in xrange(div+1): #includes the number itself and zero
    if div/x == div//x:
        print x, "is a divisor of", div
अजगर 3.x 3.0
div = int(input("Divisors of: "))
for x in range(div+1): #includes the number itself and zero
    if div/x == div//x:
        print(x, "is a divisor of", div)

इससे उठाती ZeroDivisionError क्योंकि for करने के लिए लूप प्रदान करती है कि मूल्य x । इसके बजाय यह होना चाहिए:

पायथन 2.x 2.0 2.7
div = float(raw_input("Divisors of: "))
for x in xrange(1,div+1): #includes the number itself but not zero
    if div/x == div//x:
        print x, "is a divisor of", div
अजगर 3.x 3.0
div = int(input("Divisors of: "))
for x in range(1,div+1): #includes the number itself but not zero
    if div/x == div//x:
        print(x, "is a divisor of", div)

अच्छे कोड पर सिंटैक्स त्रुटि

समय का सकल बहुमत एक SyntaxError जो एक निर्बाध रेखा को इंगित करता है इसका मतलब है कि इससे पहले लाइन पर एक मुद्दा है (इस उदाहरण में, यह एक लापता कोष्ठक है):

def my_print():
    x = (1 + 1
    print(x)

रिटर्न

  File "<input>", line 3
    print(x)
        ^
SyntaxError: invalid syntax

इस मुद्दे का सबसे आम कारण बेमेल कोष्ठक / कोष्ठक हैं, जैसा कि उदाहरण से पता चलता है।

पायथन 3 में प्रिंट स्टेटमेंट के लिए एक प्रमुख चेतावनी है:

अजगर 3.x 3.0
 >>> print "hello world"
  File "<stdin>", line 1
    print "hello world"
                      ^
SyntaxError: invalid syntax

क्योंकि print स्टेटमेंट को print() फ़ंक्शन से बदल दिया गया था , इसलिए आप चाहते हैं:

print("hello world")  # Note this is valid for both Py2 & Py3


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow