NameError: Python 3 में वैश्विक नाम 'xrange' को परिभाषित नहीं किया गया है


299

अजगर कार्यक्रम चलाते समय मुझे एक त्रुटि मिल रही है:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 110, in <module>
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 27, in __init__
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\class\inventory.py", line 17, in __init__
builtins.NameError: global name 'xrange' is not defined

खेल यहीं से है

इस त्रुटि का क्या कारण है?

जवाबों:


570

आप Python 3 के साथ Python 2 कोडबेस चलाने की कोशिश कर रहे हैं । Python 3 में xrange()इसका नाम बदल दिया गया range()

इसके बजाय पाइथन 2 के साथ गेम चलाएं। जब तक आप जानते हैं कि आप क्या कर रहे हैं, इसे पोर्ट करने की कोशिश न करें, सबसे अधिक संभावना है कि xrange()बनाम से अधिक समस्याएं होंगी range()

रिकॉर्ड के लिए, आप जो देख रहे हैं वह सिंटैक्स त्रुटि नहीं है, बल्कि इसके बजाय एक रनटाइम अपवाद है।


यदि आप जानते हैं कि आपका क्या कर रहे हैं और पायथन 3 के साथ सक्रिय रूप से पायथन 2 कोडबेस बना रहे हैं, तो आप अपने मॉड्यूल के लिए वैश्विक नाम को उपनाम के रूप में जोड़कर कोड को पा सकते हैं range। (ध्यान रखें कि आपको पायथन 2 कोडबेस में किसी भी मौजूदा उपयोग को अपडेट करना पड़ सकता है, यह सुनिश्चित करने के लिए कि आपको अभी भी पायथन 3 में एक सूची ऑब्जेक्ट मिल रहा है):range()list(range(...))

try:
    # Python 2
    xrange
except NameError:
    # Python 3, xrange is now named range
    xrange = range

# Python 2 code that uses xrange(...) unchanged, and any
# range(...) replaced with list(range(...))

या के सभी उपयोगों की जगह xrange(...)के साथ range(...)codebase में और उसके बाद अजगर 2 के साथ अजगर 3 वाक्य रचना संगत बनाने के लिए एक अलग शिम का उपयोग करें:

try:
    # Python 2 forward compatibility
    range = xrange
except NameError:
    pass

# Python 2 code transformed from range(...) -> list(range(...)) and
# xrange(...) -> range(...).

उत्तरार्द्ध उन कोडबेस के लिए बेहतर है जो केवल लंबे समय में पायथन 3 के संगत होने का लक्ष्य रखना चाहते हैं, फिर जब भी संभव हो तो केवल पायथन 3 सिंटैक्स का उपयोग करना आसान होता है।


8
सिंटैक्स त्रुटि और रनटाइम अपवाद के बीच अंतर पर ध्यान देने के लिए धन्यवाद। कुछ नया सीखा!
पिथिकोस 10

17

xrange=rangeअपने कोड में जोड़ें :) यह मेरे लिए काम करता है।


7
जैसा कि स्वीकार किए गए उत्तर में कहा गया है, ऐसा न करें, यह संभावना है कि अन्य मुद्दे होंगे। बस उस कोड को python 2 में
चलाएं

2
@ फ़ोर्ट जू ... कृपया रॉबिन फोर्केड को अपनी टिप्पणी पर विचार करें और अपना उत्तर हटा दें। शुरुआती लोगों के लिए इसका एक आईडीई और आप डीबगिंग में गहरी डाइविंग के साथ शुरू नहीं करना चाहते हैं और केवल अजगर 2/3 परिवर्तनों के बारे में सीखते हैं। अपने समय की किंडा कमर।
ZF007

10

मैंने इस आयात को जोड़कर समस्या को हल किया
अधिक जानकारी

from past.builtins import xrange

1
-------------------------------------------------- ------------------------- ModuleNotFoundError Traceback (सबसे हालिया कॉल अंतिम) <ipython-input-21-bcd3600b3604> में <मॉड्यूल> () - -> 1 से past.builtins xrange (i) में 3 के लिए xrange 2 आयात करते हैं (10): 3 प्रिंट (i) मॉड्यूलनॉटफाउंडर: कोई मॉड्यूल जिसका नाम 'पास्ट' नहीं है
rsc05

2

अजगर 2.x में, जेनरेटर को वापस करने के लिए xrange का उपयोग किया जाता है जबकि एक सूची को वापस करने के लिए रेंज का उपयोग किया जाता है। अजगर 3.x में, xrange को हटा दिया गया है और रेंज जेनरेटर को उसी तरह से लौटाता है जैसे अजगर 2.x में xrange । इसलिए, अजगर 3.x में आपको xrange की बजाय रेंज का उपयोग करने की आवश्यकता है।


1

बदलने के

अजगर 2 xrangeसे

अजगर ३ range

बाकी सब वही।


0

मैं अंतिम उत्तर से सहमत हूं। लेकिन इस समस्या को हल करने का एक और तरीका है। आप भविष्य में नामित पैकेज को डाउनलोड कर सकते हैं, जैसे कि भविष्य में पाइप स्थापित करें। और आपके .py फ़ाइल इनपुट में यह "अतीत से। फ़ाइल को आयात xrange से आयात करें"। यह विधि। इस स्थिति के लिए है कि आपकी फ़ाइल में कई सारे बदलाव हैं।


अजगर के पुराने संस्करण में नए संस्करण की सुविधाओं को प्राप्त करने के लिए इस पैकेज का उपयोग किया जाना है। अन्य तरीके से नहीं।
mcsim

क्या past.builtings.rangeकरता है बस xrangeएक संदर्भ के लिए निर्धारित है range। पायथन 2/3 पॉलीग्लॉट कोडबेस बनाते समय यह सहायक है, लेकिन एक मौजूदा परियोजना के लिए उपयुक्त नहीं है जिसे केवल पायथन 2 पर काम करने के लिए डिज़ाइन किया गया है।
मार्टिन पीटर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.