NameError: গ্লোবাল নাম 'xrange' পাইথন 3-এ সংজ্ঞায়িত করা হয়নি


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

আপনি পাইথন 3 দিয়ে পাইথন 2 কোডবেস চালানোর চেষ্টা করছেন পাইথন 3-এ xrange()নতুন নামকরণ করা range()হয়েছিল।

এর পরিবর্তে পাইথন 2 দিয়ে গেমটি চালান। এটা বন্দর করার চেষ্টা করবেন না যদি না আপনি জানেন আপনি কি করছেন, সম্ভবত সেখানে পরলোক আরো সমস্যা হবে xrange()বনাম range()

রেকর্ডের জন্য, আপনি যা দেখছেন তা কোনও সিনট্যাক্স ত্রুটি নয় বরং পরিবর্তে রানটাইম ব্যতিক্রম।


আপনি কী করছেন তা যদি আপনি জানেন এবং সক্রিয়ভাবে পাইথন 3 এর সাথে একটি পাইথন 2 কোডবেস সুসংগতভাবে তৈরি করছেন, আপনি আপনার মডিউলে গ্লোবাল নামটি একটি এলিফ হিসাবে যুক্ত করে কোডটি ব্রিজ করতে পারেন range। (একাউন্টে বিবেচনা করুন যে পাইথন 3 এ আপনি এখনও কোনও তালিকার অবজেক্ট পাবেন তা নিশ্চিত করতে আপনাকে পাইথন 2 কোডবেজে কোনও বিদ্যমান ব্যবহার আপডেট করতে হতে পারে ):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(...)কোডবেস এবং তারপর পাইথন 2 পাইথন 3 সিনট্যাক্স সামঞ্জস্যপূর্ণ করতে একটি বিভিন্ন shim ব্যবহার করুন:

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

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

আধুনিক codebases যে পাইথন 3 সামঞ্জস্যপূর্ণ হতে লক্ষ্য রাখি করতে চান তাদের জন্য বাঞ্ছনীয় শুধুমাত্র দীর্ঘ রান, এটা যখনই সম্ভব তারপর ব্যবহার করতে পাইথন 3 সিনট্যাক্স সহজ।


8
সিনট্যাক্স ত্রুটি এবং রানটাইম ব্যতিক্রমের মধ্যে পার্থক্য লক্ষ্য করার জন্য ধন্যবাদ। নতুন কিছু শিখেছি!
পিথিকোস

17

যোগ xrange=rangeআপনার কোডে :) এটা আমার কাছে কাজ করে।


7
যেমন এটি গৃহীত উত্তরে বলা হয়েছে, এটি করবেন না, সম্ভবত অন্যান্য সমস্যাও থাকবে। অজগর 2 তে কেবল কোডটি চালান
রবিনএফসিআরডি

2
@ ফ্রস্ট জু ... দয়া করে রবিন ফোরকেডকে তার মন্তব্য বিবেচনা করুন এবং আপনার উত্তরটি সরিয়ে দিন। এটি নতুনদের জন্য একটি আইডিই এবং আপনি ডিবাগিংয়ের গভীরে ডুব দিয়ে শুরু করতে চান এবং অজগর 2/3 পরিবর্তনগুলি সম্পর্কে সম্পূর্ণরূপে শিখতে চান না। তোমার সময়ের কোমর
ZF007

10

আমি এই আমদানি
আরও তথ্য যুক্ত করে সমস্যাটি সমাধান করেছি

from past.builtins import xrange

1
-------------------------------------------------- ------------------------- মডিউল নটফাউন্ডএরর ট্রেসব্যাক (সর্বশেষতম কলটি শেষ) <মডেল> () এ <পিথন-ইনপুট-21-bcd3600b3604> - -> অতীত থেকে 1। বিল্টিনস x x 2 তে আমার জন্য এক্সারেঞ্জ 2 আমদানি করে (10): 3 মুদ্রণ (i) মডিউল নটফাউন্ড এরিয়ার: 'অতীত' নামে কোনও মডিউল নেই
আরএসসি05

pip3 install future আমার জন্য উপরের ত্রুটি স্থির করে
কাটু

2

পাইথন ২.x এ, এক্সরেঞ্জ ব্যাপ্তি ব্যবহারের সময় জেনারেটর ফেরত দিতে ব্যবহৃত হয় একটি তালিকা ফেরত ব্যবহৃত হয়। পাইথন ৩.x এ, এক্সরেঞ্জ সরানো হয়েছে এবং ব্যাপ্তি পাইথন ২.x- তে এক্সরেঞ্জের মতো জেনারেটর প্রদান করে range অতএব, পাইথন 3.x এ আপনাকে এক্সরেঞ্জের পরিবর্তে ব্যাপ্তি ব্যবহার করা উচিত।


1

প্রতিস্থাপন করা

পাইথন 2 xrange থেকে

পাইথন ঘ range

বাকি সব একই।


0

আমি শেষের উত্তরের সাথে একমত। তবে এই সমস্যাটি সমাধানের আরও একটি উপায় রয়েছে You আপনি ভবিষ্যতে পিপ ইনস্টল করা ভবিষ্যতের মতো প্যাকেজটি ডাউনলোড করতে পারেন nd এবং আপনার .py ফাইল ইনপুটটিতে এটি "অতীত। বিল্টিন আমদানি এক্সরেঞ্জ থেকে"। এই পদ্ধতি আপনার ফাইলে অনেকগুলি এক্সরঞ্জ রয়েছে এমন পরিস্থিতির জন্য।


পাইথনের পুরানো সংস্করণে নতুন সংস্করণটির বৈশিষ্ট্যগুলি পেতে এই প্যাকেজটি ব্যবহার করা হবে। অন্য উপায় না।
এমসিএসিম

কি past.builtings.rangeকরে তা কেবল xrangeএকটি রেফারেন্স হিসাবে সেট করা আছে range। পাইথন 2/3 বহুভোগ কোডবেস তৈরি করার সময় এটি সহায়ক, তবে কেবলমাত্র পাইথন 2 এ কাজ করার জন্য ডিজাইন করা কোনও বিদ্যমান প্রকল্পের জন্য এটি উপযুক্ত নয়।
মার্টিজন পিটারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.