পাইথনে "অপ্রত্যাশিত ইনডেন্ট" দিয়ে কী করবেন?


117

পাইথনের "অপ্রত্যাশিত ইনডেন্ট" ত্রুটিটি কীভাবে সংশোধন করব?


4
একটি কোড খণ্ড যা ত্রুটি তৈরি করে তা আমাদের আপনার সমস্যা আরও ভালভাবে বুঝতে সহায়তা করবে। কিছু কোড অন্তর্ভুক্ত করতে দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন।
আরবেরটিগ

7
এটিকে আমার কাছে শ্বেত স্পেসের মতো মনে হচ্ছে যাতে কোডের নমুনাটি অকেজো হয়ে যায়।
জেমস ম্যাকমাহন

লীগের প্রশ্ন এবং কোনও উত্তর চয়ন করবেন না।
rafael.js

"আমি কীভাবে ত্রুটিটি সংশোধন করব ..."? এটি কোথায় ঘটেছে তা সনাক্ত করে এবং ত্রুটির কারণটি স্থির করে। এক্ষেত্রে, সেই নির্দিষ্ট লাইনের ইন্ডেন্টেশনটি দেখে পাইথন কী প্রত্যাশা করে ...
twalberg

উত্তর:


132

কোড ব্লক কখন শুরু হয় এবং শেষ হয় তা নির্ধারণ করতে পাইথন লাইনের শুরুতে ব্যবধান ব্যবহার করে। ত্রুটিগুলি আপনি পেতে পারেন:

অপ্রত্যাশিত খাঁজ. কোডের এই লাইনটির শুরুতে আগেরটির চেয়ে বেশি স্পেস রয়েছে, তবে এর আগের একটিটি সাব-ব্লকের শুরু নয় (যেমন / যখন / বিবৃতি দেওয়ার জন্য)। কোনও ব্লকের কোডের সমস্ত লাইন অবশ্যই সাদা রঙের একই স্ট্রিং দিয়ে শুরু করতে হবে। এই ক্ষেত্রে:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

আন্তঃসংযোগমূলকভাবে অজগরটি চালানোর সময় এটি একটি সাধারণ বিষয়: নিশ্চিত হয়ে নিন যে আপনি আপনার কমান্ডগুলির আগে কোনও অতিরিক্ত স্পেস রাখবেন না। (উদাহরণ কোডটি অনুলিপি এবং-পেস্ট করার সময় খুব বিরক্তিকর!)

>>>   print "hello"
IndentationError: unexpected indent

আনইন্ডেন্ট কোনও বাহ্যিক ইনডেন্টেশন স্তরের সাথে মেলে না। কোডের এই লাইনটির শুরুতে আগের চেয়ে কম স্পেস রয়েছে তবে এটি সমানভাবে এটি অন্য কোনও ব্লকের সাথে মেলে না এটি এর অংশ হতে পারে। পাইথন কোথায় যায় তা সিদ্ধান্ত নিতে পারে না। উদাহরণস্বরূপ, নিম্নলিখিতটিতে, চূড়ান্ত মুদ্রণটি যদি অনুচ্ছেদের অংশ হিসাবে অনুমিত হয়, না?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

একটি ইন্টেন্টেড ব্লক প্রত্যাশিত। কোডের এই লাইনটিতে শুরুতে আগের মতো একই সংখ্যক স্পেস রয়েছে তবে শেষ লাইনটি একটি ব্লক (যেমন / যখন / বিবৃতিতে, ফাংশন সংজ্ঞার জন্য) শুরু করবে বলে আশা করা হয়েছিল।

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

আপনি যদি এমন কোনও ফাংশন চান যা কিছু না করে, "না-অপ্ট" কমান্ড পাসটি ব্যবহার করুন :

>>> def foo():
...     pass

ট্যাব এবং স্পেসগুলি মিশ্রিত করার অনুমতি দেওয়া হয়েছে (কমপক্ষে পাইথনের আমার সংস্করণে) তবে পাইথন ধরেছেন ট্যাবগুলি 8 টি অক্ষর দীর্ঘ, যা আপনার সম্পাদকের সাথে মেলে না। ট্যাবগুলিতে কেবল "না" বলুন। বেশিরভাগ সম্পাদক তাদের স্পেস দ্বারা স্বয়ংক্রিয়ভাবে প্রতিস্থাপনের অনুমতি দেয়।

এই সমস্যাগুলি এড়ানোর সর্বোত্তম উপায় হ'ল আপনি যখন সাব-ব্লকটি ইনডেন্ট করেন তখন সর্বদা অবিচ্ছিন্ন সংখ্যক স্পেস ব্যবহার করা এবং আদর্শভাবে একটি ভাল আইডিই ব্যবহার করা যা আপনার সমস্যার সমাধান করে। এটি আপনার কোডকে আরও পঠনযোগ্য করে তুলবে।


7
ভাল ব্যাখ্যা। তদ্ব্যতীত, আমি নোটপ্যাড ++ এ 'ট্যাব' এবং 'স্পেস বার' এর সাথে স্পেসগুলি মিশ্রিত করে 'স্পেসস' এর জন্য 'ট্যাব' প্রতিস্থাপন এবং স্থির করে দিলে আমি ইনডেন্ট অপ্রত্যাশিত ত্রুটিও কাটিয়েছি।
জোসে রোসাস সেনজ

2
@ জোসরোসাসসেনজ আপনার মন্তব্য আমাকে এতটা কষ্ট থেকে বাঁচিয়েছে
user3726345

একটি অতিরিক্ত কারণ exceptএকটি tryধারাটির অংশটি হারিয়েছে । কোডটি ঠিক দেখাচ্ছে (যেটিতে আনইন্ডেন্টেড লাইনটি tryব্লকের বাইরে রয়েছে ) তবে পাইথন এটি 'অপ্রত্যাশিত ইনডেন্ট' ত্রুটি হিসাবে প্রতিবেদন করেছে। exceptসম্ভবত এটি ব্যবহার করে এটি এখানে সংশোধন করা হয়েছেpass ( এখানে এখানে )
ডাম্বলডেড

@ ডাম্বল্যাড অজগরটির কোন সংস্করণটি দেখছেন? আমি যখন আমার চেষ্টা করি (২.7.১৫ এবং ৩.6.৮ উভয়), তখন আমি একটি সিনট্যাক্স এরর পাই
অ্যালিস পার্সেল

কোনও ওয়েবসাইট থেকে কোড অনুলিপি / আটকানোর সময় আমি এই ত্রুটির মুখোমুখি হয়েছি। পজিশনিং ঠিক হাজির হয়েছে তবে কিউজিআইএস (৩.১০) কোডটি চালানোর আগে আমার শ্বেত-স্থানটি সরিয়ে পুনরায় প্রয়োগ করতে হবে apply
বেঞ্জ

23

পাইথনে, ব্যবধানটি খুব গুরুত্বপূর্ণ, এটি আপনার কোড ব্লকগুলির কাঠামো দেয়। এই ত্রুটিটি ঘটে যখন আপনি আপনার কোডের কাঠামো বিশৃঙ্খলা করেন, উদাহরণস্বরূপ:

def test_function() :
   if 5 > 3 :
   print "hello"

আপনার ফাইলটিতে ট্যাব এবং স্পেসের মিশ্রণও থাকতে পারে।

আমি আপনার মত একটি পাইথন সিনট্যাক্স সচেতন সম্পাদক ব্যবহার সুপারিশ PyScripter , অথবা Netbeans


1
হ্যাঁ স্পষ্টভাবে অজগর সচেতন সম্পাদক ব্যবহার করুন! আমি ডিফল্ট সেটিংস সহ নোটপ্যাড ++ এ সম্পাদনা করার সময় আমার সমস্যা ছিল এবং এটি সাদা স্থান ভুল হয়ে যাচ্ছিল
ডেভ আর্চার

2
মিশ্র ট্যাব এবং স্পেসগুলি "
সিনট্যাক্স এরিয়ার:

ঠিক যেমন শীর্ষস্থানীয়, পাইথন নেটবিয়ান প্লাগইন বর্তমানে বিদ্যমান কোড থেকে ট্যাবগুলিকে স্পেসে রূপান্তরিত করে না। তবে আপনি নতুন কোড লেখার সাথে সাথে এটি কাজ করবে do
জেমস ম্যাকমাহন

পাইচার্ম এটিকে ধারাবাহিকভাবে রূপান্তর করতে পারে। এছাড়াও এটি "ফল্ট" এ লাইনগুলি হাইলাইট করবে। আমি উক্তি ব্যবহার করি কারণ এটি 1960-এর দশক নয় এবং পাইথনের মতো দুর্দান্ত ভাষা এখনও বিশ্বাস করতে পারি না যে পাইথনের এখনও এই মস্তিষ্ক-মৃত, সময় নষ্টকারী ত্রুটি রয়েছে।
এচেলন

আমি আমার কোড লেখার মধ্য দিয়ে অনিচ্ছাকৃতভাবে সম্পাদকদের স্যুইচ করেছি এবং এটি আমার কোডগুলি আরও নতুন কোডে স্টাফ করে। পরিবর্তনটি চোখের সামনে সুস্পষ্ট ছিল না, তবে দোভাষী আমার কোডটি চালাবেন না। এই পোস্টটি আমাকে সমস্যাটি খুঁজে পেতে সহায়তা করেছে।
লুসিয়ান স্টালস

21

আপনি ট্যাব এবং স্পেসগুলি বেমানানভাবে ব্যবহার করছেন কিনা তা জানতে আপনার কোডটি -২০ বিকল্পের সাথে চালান


16

আপনি যেই সম্পাদক ব্যবহার করছেন তাতে দৃশ্যমান শ্বেত স্পেস চালু করুন এবং ফাঁকা স্থানগুলি সহ ট্যাবগুলি প্রতিস্থাপন করুন।

আপনি পাইথন মিক্সিং ট্যাব এবং স্পেসের সাথে ট্যাবগুলি ব্যবহার করতে গিয়ে সাধারণত আপনার ত্রুটি হয়। 4 স্পেসের সাথে ট্যাবগুলি প্রতিস্থাপন করা পাইথন কোড লেখার জন্য প্রস্তাবিত পদ্ধতি।


1
আপনি কীভাবে বিশেষভাবে এটি করবেন? আমি সাব্লাইম ব্যবহার করছি।
চিবোল

8

সঠিক ইন্ডেন্টেশন ব্যবহার করে। পাইথন হোয়াইটস্পেস সচেতন, তাই আপনাকে ব্লকগুলির জন্য এর ইন্ডেন্টেশন নির্দেশিকা অনুসরণ করতে হবে বা আপনি ইনডেন্টেশন ত্রুটি পাবেন।


6

আপনি যদি সাবাইম ব্যবহার করে পাইথন লিখছেন এবং ইনডেন্টেশন ত্রুটি পেয়ে থাকেন,

দেখুন -> ইনডেন্টেশন -> ইনডেন্টেশনকে স্পেসে রূপান্তর করুন

আমি যে ইস্যুটি বর্ণনা করছি তা সাব্লাইম টেক্সট এডিটর দ্বারা সৃষ্ট। একই সমস্যা অন্যান্য সম্পাদকদের দ্বারাও হতে পারে। মূলত, পাইথনের সাথে অ্যাডেন্টেশনগুলি ট্র্যাকগুলির শর্তে ইনডেন্টেশনগুলি কোডিংয়ের বিপরীতে বিভিন্ন সম্পাদকের বিপরীতে স্পেসের ক্ষেত্রে ইন্ডেন্টেশনগুলি ব্যবহার করতে ইচ্ছুক ছিল with


ওহ ... তাই কি উত্সাহ এই কারণ?
নিতিন

হ্যাঁ, আমি যে সমস্যাটি বর্ণনা করছি তা সুবাইম দ্বারা সৃষ্ট। অন্যান্য সম্পাদকদের দ্বারাও হতে পারে। মূলত, পাইথনের সাথে অ্যাডেন্টেশনগুলি ট্র্যাকগুলির শর্তে ইনডেন্টেশনগুলি কোডিং করে বিভিন্ন সম্পাদক বনাম বিভিন্ন স্থানের শর্তে ইন্ডেন্টেশনগুলি ব্যবহার করতে ইচ্ছুক ছিল।
পুনেতে লাম্বা

নোটপ্যাড ++ নিয়ে আমার একই সমস্যা ছিল। যা সত্য চোখের সাথে মিলিত হয়েছে তাই এই ক্র্যাক করতে কিছুটা সময় নিয়েছিল। আমি চিত্রে একটি সময়ে কার্সার এক গৃহস্থালির কাজ সরাতে আউট সম্পাদক ট্যাব কিছু অনুসরণকারী শূণ্যস্থান রূপান্তরিত ছিল
ভরত আনন্দ

4

নিশ্চিত হয়ে নিন যে আপনি আপনার সম্পাদকে "ট্যাবগুলির পরিবর্তে স্পেস সন্নিবেশ করান" বিকল্পটি ব্যবহার করছেন। তারপরে আপনি বেছে নিতে পারেন যে আপনি একটি ট্যাব প্রস্থ চান, উদাহরণস্বরূপ ৪. আপনি সম্পাদনা -> পছন্দসমূহ -> সম্পাদকের অধীনে এই বিকল্পগুলি gedit এ খুঁজে পেতে পারেন।

নীচের লাইন: ব্যবহার করুন স্পেসগুলি ট্যাব নয়


আপনার নীচের লাইনটি কৌতুকটি করেছিল!
নিক ডিভ

3

পাইথন ইন্টারপ্রেটারে (টার্মিনাল / কনসোল) কোনও কিছু আটকালেও এই ত্রুটি দেখা দিতে পারে।

মনে রাখবেন যে দোভাষা একটি শূন্য রেখাকে একটি এক্সপ্রেশনের শেষে হিসাবে ব্যাখ্যা করে, তাই যদি আপনি এমন কিছুতে পেস্ট করেন

def my_function():
    x = 3

    y = 7

দোভাষী দের খালি রেখাকে ভাবের y = 7সমাপ্তির আগে ব্যাখ্যা করবে , অর্থাৎ আপনি নিজের ফাংশনটি সংজ্ঞায়িত করেছেন এবং পরবর্তী লাইনে - y = 7ভুল ইনডেন্টেশন হবে কারণ এটি একটি নতুন এক্সপ্রেশন।


কীটি ফাংশন সংজ্ঞায়নের ফাঁকা রেখাগুলি ঠিক আছে, তবে পাইথনটি ফাংশনটির শেষে হিসাবে কোনও ফাঁকা রেখা ব্যাখ্যা করার পরে তাদের প্রাথমিক শ্বেত স্পেস থাকতে হবে
মাইকেলচিরিকো

3

একটি বিষয় যা উল্লেখ করা হয়নি বলে মনে হচ্ছে তা হল কোডটি নিয়ে সমস্যা হওয়ার কারণে এই ত্রুটিটি উত্থিত হতে পারে যার সাথে ইন্ডেন্টেশন সম্পর্কিত কোনও সম্পর্ক নেই।

উদাহরণস্বরূপ, নিম্নলিখিত স্ক্রিপ্ট নিন:

def add_one(x):
    try:
        return x + 1
add_one(5)

এটি অবশ্যই ফিরে আসে IndentationError: unexpected unindentযখন সমস্যা অবশ্যই একটি অনুপস্থিত except:বিবৃতি হয়।

আমার বক্তব্য: উপরের কোডটি পরীক্ষা করুন যেখানে অপ্রত্যাশিত (আন) ইনডেন্টটি রিপোর্ট করা হয়েছে!


2

ইন্ডেন্টেশনটি যদি ঠিক থাকে তবে আপনার সম্পাদকের কাছে "ভিউ হোয়াইটস্পেস" বিকল্প আছে কিনা তা একবার দেখুন। এটি সক্ষম করার ফলে কোথায় স্পেস এবং ট্যাব মিশ্রিত হয় তা সন্ধান করার অনুমতি দেওয়া উচিত।


2

একটি কৌশল আছে যা সর্বদা আমার জন্য কাজ করে:

যদি আপনি পেয়েছেন এবং অপ্রত্যাশিত ইনডেন্ট পেয়েছেন এবং আপনি দেখতে পান যে সমস্ত কোড পুরোপুরি ইন্টেন্টেড রয়েছে তবে অন্য সম্পাদক দিয়ে এটি খোলার চেষ্টা করুন এবং আপনি দেখতে পাবেন কোন কোডের লাইনটি ইন্টেন্টেড নয়।

আমার সাথে যখন ভিএম, জিডিট বা এডিটর ব্যবহার করা হয়েছিল তখনই এটি ঘটেছিল।

আপনার কোডের জন্য শুধুমাত্র 1 সম্পাদক ব্যবহার করার চেষ্টা করুন।


2

আপনার স্ক্রিপ্টটি অনুলিপি করুন এবং "" "আপনার সম্পূর্ণ কোড" "" এর নীচে রাখুন ...

একটি ভেরিয়েবলের মধ্যে এই লাইনটি উল্লেখ করুন .. যেমন,

a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..

এখন ctrl + b ব্যবহার করে সাব্লাইম এডিটারে এই কোডটি কার্যকর করুন, এখন এটি কনসোলে ইনডেন্ট কোড প্রিন্ট করবে। এটাই


আমি কীভাবে আমার কোড চালাব? আমি কি "" "এবং" "" এবং মুদ্রণটি a.replace মুছে ফেলা এবং সাধারণভাবে এটি চালাতে পারি?
চিবোল

কোনও "" "" "" (ট্রিপল কোট) স্ট্রিংয়ের পরিবর্তে আপনার সামগ্রী উল্লেখ করে। তার প্রয়োজনীয় কারণ আপনার কোড স্ট্রিং যা একক / ডবল কোট তাই "" "প্রয়োজনীয় থাকতে পারে।
Mohideen বিন মোহাম্মদ

2

আপনাকে যা করতে হবে তা হ'ল নিম্নলিখিত কোডগুলির শুরু থেকে স্পেস বা ট্যাব স্পেসগুলি সরিয়ে ফেলা

from django.contrib import admin

# Register your models here.
from .models import Myapp
admin.site.register(Myapp)

2

এটি সমাধানের জন্য নিম্নলিখিত কমান্ডটি চালান:

autopep8 -i <filename>.py

এটি আপনার কোড আপডেট করবে এবং সমস্ত ইনডেন্টেশন ত্রুটিগুলি সমাধান করবে :)

আশা করি এটি সমাধান হবে


কার্যকর করা খুব সহজ। আমার জন্য প্রতিটি সময় কাজ করে যে কারণে আমি আশা করি যে
কারওর

1

নোটপ্যাড ++ ট্যাবটির স্থানটি সঠিক দিচ্ছিল তবে অবশেষে সাব্লাইম পাঠ্য সম্পাদকটিতে ইন্ডেন্টেশন সমস্যাটি পাওয়া গেছে।

সাব্লাইম টেক্সট এডিটর ব্যবহার করুন এবং লাইন লাইন যান


0

পাইথনে ইন্ডেন্টেশন গুরুত্বপূর্ণ এবং এটি অন্যান্য কোডিংয়ের অন্যান্য ভাষার চেয়ে আলাদা কোড পঠনযোগ্যতার জন্য নয়। যদি আপনার কোডটিতে পর পরের কমান্ডগুলির মধ্যে কোনও সাদা স্থান বা ট্যাব থাকে তবে পাইথন এই ত্রুটিটি দেয় কারণ পাইথন এটি সংবেদনশীল। আমরা যখন কোনও পাইথনে কোডের কপি এবং পেস্ট করি তখন আমরা এই ত্রুটিটি পেতে পারি। নোটপ্যাড ++ এর মতো কোনও পাঠ্য সম্পাদক ব্যবহার করে এই স্পেসগুলি সনাক্ত এবং মুছে ফেলার বিষয়ে নিশ্চিত হন বা কোডের লাইন থেকে ম্যানুয়ালি শ্বেত স্থানটি সরিয়ে ফেলুন যেখানে আপনি কোনও ত্রুটি পাচ্ছেন।

Step1 :Gives error 
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])

Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])

Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]

ধন্যবাদ!

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