Bagaimana cara memperbaiki kesalahan "indentasi tak terduga" di python?
Bagaimana cara memperbaiki kesalahan "indentasi tak terduga" di python?
Jawaban:
Python menggunakan spasi di awal baris untuk menentukan kapan blok kode dimulai dan diakhiri. Kesalahan yang bisa Anda dapatkan adalah:
Indentasi tak terduga. Baris kode ini memiliki lebih banyak spasi di awal daripada yang sebelumnya, tetapi yang sebelumnya bukan awal dari sub blokir (misalnya pernyataan if / while / for). Semua baris kode dalam sebuah blok harus dimulai dengan string spasi kosong yang sama persis. Misalnya:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
Yang ini sangat umum ketika menjalankan python secara interaktif: pastikan Anda tidak meletakkan spasi ekstra sebelum perintah Anda. (Sangat mengganggu saat menyalin dan menempel kode contoh!)
>>> print "hello"
IndentationError: unexpected indent
Unindent tidak cocok dengan level indentasi luar mana pun. Baris kode ini memiliki lebih sedikit spasi di awal daripada yang sebelumnya, tetapi sama halnya tidak cocok dengan blok lain yang bisa menjadi bagiannya. Python tidak bisa memutuskan kemana perginya. Misalnya, berikut ini, apakah cetakan akhir seharusnya menjadi bagian dari klausa if, atau bukan?
>>> if user == "Joey":
... print "Super secret powers enabled!"
... print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
Diharapkan blok berlekuk. Baris kode ini memiliki jumlah spasi yang sama di awal dengan yang sebelumnya, tetapi baris terakhir diharapkan untuk memulai blok (misalnya jika / while / untuk pernyataan, definisi fungsi).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Jika Anda ingin fungsi yang tidak melakukan apa-apa, gunakan "no-op" perintah lulus :
>>> def foo():
... pass
Mencampur tab dan spasi diperbolehkan (setidaknya pada versi Python saya), tetapi Python mengasumsikan tab sepanjang 8 karakter, yang mungkin tidak cocok dengan editor Anda. Cukup ucapkan "tidak" ke tab. Kebanyakan editor mengizinkannya untuk diganti secara otomatis dengan spasi.
Cara terbaik untuk menghindari masalah ini adalah dengan selalu menggunakan jumlah spasi yang konsisten saat Anda membuat sub-blokir, dan idealnya menggunakan IDE yang baik yang memecahkan masalah untuk Anda. Ini juga akan membuat kode Anda lebih mudah dibaca.
except
bagian try
klausa. Kode terlihat benar (dalam hal baris try
tanpa indentasi dimaksudkan untuk berada di luar blok) tetapi Python melaporkan ini sebagai kesalahan 'indentasi tak terduga'. Ini diperbaiki dengan menambahkan except
, mungkin menggunakan pass
(seperti di sini )
Dalam Python, jarak sangat penting, ini memberikan struktur blok kode Anda. Kesalahan ini terjadi ketika Anda mengacaukan struktur kode Anda, misalnya seperti ini:
def test_function() :
if 5 > 3 :
print "hello"
Anda mungkin juga memiliki campuran tab dan spasi di file Anda.
Saya sarankan Anda menggunakan editor sadar sintaks python seperti PyScripter , atau Netbeans
Aktifkan spasi yang terlihat di editor apa pun yang Anda gunakan dan aktifkan ganti tab dengan spasi.
Meskipun Anda dapat menggunakan tab dengan tab dan spasi pencampuran Python biasanya mengarah ke kesalahan yang Anda alami. Mengganti tab dengan 4 spasi adalah pendekatan yang disarankan untuk menulis kode Python.
Jika Anda menulis Python menggunakan Sublime dan mendapatkan kesalahan indentasi,
view -> indentation -> convert indentation to space
Masalah yang saya jelaskan disebabkan oleh editor teks Sublim. Masalah yang sama bisa disebabkan oleh editor lain juga. Pada dasarnya, masalah ini berkaitan dengan Python yang ingin memperlakukan lekukan dalam hal spasi versus berbagai editor yang mengkodekan lekukan dalam hal tab.
Pastikan Anda menggunakan opsi "sisipkan spasi, bukan tab" di editor Anda. Kemudian Anda dapat memilih lebar tab yang Anda inginkan, misalnya 4. Anda dapat menemukan opsi-opsi tersebut di gedit di bawah edit -> preferensi -> editor.
Intinya: GUNAKAN RUANG bukan tab
Kesalahan ini juga dapat terjadi saat menempelkan sesuatu ke interpreter Python (terminal / konsol).
Perhatikan bahwa interpreter menafsirkan baris kosong sebagai akhir ekspresi, jadi jika Anda menempelkan sesuatu seperti
def my_function():
x = 3
y = 7
juru bahasa akan menafsirkan baris kosong sebelumnya y = 7
sebagai akhir ekspresi, yaitu Anda telah selesai mendefinisikan fungsi Anda, dan baris berikutnya - y = 7
akan memiliki indentasi yang salah karena ini adalah ekspresi baru.
Satu masalah yang sepertinya tidak disebutkan adalah bahwa kesalahan ini dapat muncul karena masalah dengan kode yang tidak ada hubungannya dengan indentasi.
Misalnya, ambil skrip berikut:
def add_one(x):
try:
return x + 1
add_one(5)
Ini mengembalikan IndentationError: unexpected unindent
ketika masalahnya tentu saja adalah except:
pernyataan yang hilang .
Maksud saya: periksa kode di atas di mana indentasi yang tidak terduga (tidak) dilaporkan!
Jika lekukan terlihat ok, lihat apakah editor Anda memiliki opsi "Lihat Ruang Putih". Mengaktifkan ini akan memungkinkan untuk menemukan di mana spasi dan tab dicampur.
Ada trik yang selalu berhasil untuk saya:
Jika Anda mendapatkan dan indentasi yang tidak terduga dan Anda melihat bahwa semua kode menjorok dengan sempurna, coba buka dengan editor lain dan Anda akan melihat baris kode mana yang tidak diindentasi.
Itu terjadi pada saya ketika menggunakan vim, gedit atau editor seperti itu.
Coba gunakan hanya 1 editor untuk kode Anda.
Cukup salin skrip Anda dan letakkan di bawah "" "seluruh kode" "" ...
tentukan baris ini dalam variabel .. seperti,
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..
Sekarang jalankan kode ini, di Sublime Editor menggunakan ctrl + b, sekarang akan mencetak kode indentasi di konsol. itu dia
Yang perlu Anda lakukan hanyalah menghapus spasi atau spasi tab dari awal kode berikut
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Jalankan perintah berikut untuk menyelesaikannya:
autopep8 -i <filename>.py
Ini akan memperbarui kode Anda dan menyelesaikan semua Kesalahan indentasi :)
Semoga ini akan menyelesaikannya
Notepad ++ memberikan ruang tab yang benar tetapi masalah indentasi akhirnya ditemukan di editor teks Sublime.
Gunakan editor teks Sublime dan lanjutkan baris demi baris
Indentasi di Python penting dan ini bukan untuk keterbacaan kode, tidak seperti banyak bahasa pemrograman lainnya. Jika ada spasi atau tab dalam kode Anda di antara perintah yang berurutan, python akan memberikan kesalahan ini karena Python sensitif terhadap ini. Kami cenderung mendapatkan kesalahan ini ketika kami melakukan salin dan tempel kode ke Python apa pun. Pastikan untuk mengidentifikasi dan menghapus spasi ini menggunakan editor teks seperti Notepad ++ atau secara manual hapus spasi dari baris kode tempat Anda mendapatkan kesalahan.
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]]
Terima kasih!