Bagaimana cara memperbaiki kesalahan "indentasi tak terduga" di python?
python
syntax-error
Kipas Macintosh
sumber
sumber
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:
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!)
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?
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).
Jika Anda ingin fungsi yang tidak melakukan apa-apa, gunakan "no-op" perintah lulus :
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.
sumber
except
bagiantry
klausa. Kode terlihat benar (dalam hal baristry
tanpa indentasi dimaksudkan untuk berada di luar blok) tetapi Python melaporkan ini sebagai kesalahan 'indentasi tak terduga'. Ini diperbaiki dengan menambahkanexcept
, mungkin menggunakanpass
(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:
Anda mungkin juga memiliki campuran tab dan spasi di file Anda.
Saya sarankan Anda menggunakan editor sadar sintaks python seperti PyScripter , atau Netbeans
sumber
Jalankan kode Anda dengan opsi -tt untuk mengetahui apakah Anda menggunakan tab dan spasi secara tidak konsisten
sumber
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.
sumber
Dengan menggunakan lekukan yang benar. Python peka spasi, jadi Anda harus mengikuti pedoman indentasi untuk blok atau Anda akan mendapatkan kesalahan indentasi.
sumber
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.
sumber
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
sumber
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
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.sumber
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:
Ini mengembalikan
IndentationError: unexpected unindent
ketika masalahnya tentu saja adalahexcept:
pernyataan yang hilang .Maksud saya: periksa kode di atas di mana indentasi yang tidak terduga (tidak) dilaporkan!
sumber
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.
sumber
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.
sumber
Cukup salin skrip Anda dan letakkan di bawah "" "seluruh kode" "" ...
tentukan baris ini dalam variabel .. seperti,
Sekarang jalankan kode ini, di Sublime Editor menggunakan ctrl + b, sekarang akan mencetak kode indentasi di konsol. itu dia
sumber
Yang perlu Anda lakukan hanyalah menghapus spasi atau spasi tab dari awal kode berikut
sumber
Jalankan perintah berikut untuk menyelesaikannya:
Ini akan memperbarui kode Anda dan menyelesaikan semua Kesalahan indentasi :)
Semoga ini akan menyelesaikannya
sumber
Notepad ++ memberikan ruang tab yang benar tetapi masalah indentasi akhirnya ditemukan di editor teks Sublime.
Gunakan editor teks Sublime dan lanjutkan baris demi baris
sumber
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.
Terima kasih!
sumber