IndentationError: unindent tidak cocok dengan level indentasi luar mana pun


585

Ketika saya mengkompilasi kode Python di bawah ini, saya mengerti

IndentationError: unindent tidak cocok dengan level indentasi luar mana pun


import sys

def Factorial(n): # Return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

Mengapa?


7
dan mungkin rentang (1, n +1) akan lebih baik, jika Anda ingin memasukkan 'n' dalam perhitungan Anda :-)
Abgan

7
Aku punya kesalahan yang sama, tapi saya kebetulan indent metode jalan sampai dalam kode sedikit ke kiri, yang memberikan kesalahan ini di bagian bawah berikutnya metode setelah. Jadi kesalahan ini dapat terjadi tidak hanya dari pencampuran tab dan spasi.
Kontrak Prof. Falken dilanggar

14
Saya menggunakan Sublime Text 3. Saya punya proyek Django. Saya memperbaiki kesalahan menggunakanView > Indentation > Intent Using Spaces
AbhimanyuAryan

Punya masalah ini di pycharm, mengatur tab dan mengatur jarak pada konfigurasi tidak berhasil. Masalahnya adalah saya mempunyai file ~ / .editorconfig yang mengesampingkan konfigurasi pycharm.
Ken Myers

Saya menemukan menggunakan IDLE membuatnya lebih mudah untuk menemukan masalah lekukan. Ini akan dengan jelas menemukan kesalahan lekukan yang tidak akan ditemukan oleh kebanyakan editor.
Dennis Gathagu

Jawaban:


670

Poster lain mungkin benar ... mungkin ada ruang yang tercampur dengan tab Anda. Coba lakukan pencarian & ganti untuk mengganti semua tab dengan beberapa spasi.

Coba ini:

import sys

def Factorial(n): # return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

print Factorial(10)

2
ya, saya harus benar-benar ruang atas bagian loop dalam pada dua baris terakhir (hanya dalam SO). Tidak yakin mengapa ...
cbrulak

3
baris pertama saya, "hasil = 0" (yang seharusnya sudah 1, terima kasih untuk mengoreksi) diberi spasi sementara sisanya tab, sialan, tidak tahu python seperti itu
cbrulak

1
Ya, itu bisa rumit. Saya menggunakan emacs untuk mengedit python, dan saya mengaturnya untuk selalu mengganti tab dengan spasi dalam file py jadi saya tidak punya masalah ini. Notepad ++ mungkin memiliki opsi seperti ini juga.
Kevin Tighe

3
Punya masalah yang sama atm :). SublimeText menunjukkan spasi sebagai titik, cukup berguna.
Kris

Jadi tunggu sebentar, Anda dapat membuat spasi dengan ATAU tab. Anda hanya perlu konsisten? poni kepala
David

265

PENTING : Spasi adalah metode yang lebih disukai - lihat PEP008 Lekukan dan Tab atau Spasi? . (Terima kasih kepada @Siha untuk ini.)

Untuk Sublime Textpengguna:

Setel Sublime Textuntuk menggunakan tab untuk lekukan: View-> Indentation->Convert Indentation to Tabs

Hapus centang Indent Using Spacesopsi juga di sub-menu yang sama di atas. Ini akan segera menyelesaikan masalah ini.


1
Juga setiap kali menggunakan Python, pastikan Anda mengatur opsi serupa di mana pun IDE / Text Editor yang Anda gunakan
activatedgeek

20
Juga di ATOM, Paket> Ruang Putih> Konversi Spasi menjadi Tab dan Anda akan menghindari Sakit Kepala Kesalahan Sintaksis Python!
loretoparisi

1
Spaces adalah metode yang disukai - lihat Lekukan dan Tab atau Spasi PEP008 ? . Luhur juga dapat diatur untuk melakukannya dengan cara ini.
SiHa

13
Anda mengatakan spasi adalah metode yang disukai namun jawaban Anda meminta orang untuk meminta luhur untuk menggunakan tab! Saya bingung
gota

@NunoCalaim Sayangnya, itu terjadi setelah saya menjawab pertanyaan. Jika Anda memulai proyek baru, silakan gunakan teknik ruang yang disukai. Itu sebabnya saya membuat edit dengan huruf tebal sehingga setiap pendatang baru mengetahui adanya disclaimer.
Diaktifkangeek

137

Untuk dengan mudah memeriksa masalah dengan tab / spasi Anda sebenarnya dapat melakukan ini:

python -m tabnanny yourfile.py

atau Anda dapat mengatur editor dengan benar tentu saja :-)


1
Saya mencoba ini dalam file dengan beberapa kesalahan indentasi tab / spasi, tetapi tidak ada output sama sekali dengan file tab yang salah. ada ide?
Luchux

1
Saya punya masalah dengan spasi dan kesalahannya mengatakan itu ada di saluran 191, tetapi berkat tabnanny saya menemukan masalah sebenarnya bukan pada saluran itu, tetapi di baris di atas.
richar8086

Terima kasih! Tip yang bagus. Kesalahan diidentifikasi oleh flake8 dalam Kode VS tetapi tidak bisa mengidentifikasi di mana masalahnya - tabnanny lakukan dalam mikrodetik.
Steve

39

Apakah Anda yakin tidak mencampur tab dan spasi di spasi putih indentasi Anda? (Itu akan menyebabkan kesalahan itu.)

Catatan, Anda disarankan tidak menggunakan tab dalam kode Python. Lihat panduan gaya . Anda harus mengonfigurasi Notepad ++ untuk menyisipkan spasi untuk tab.


Saya bingung. Jawaban di atas menyatakan untuk mengganti opsi editor teks untuk menggunakan tab alih-alih spasi.
spurra

3
@BananaCode Selama Anda menggunakan tab HANYA atau spasi HANYA, secara teknis tidak masalah yang Anda pilih. Meskipun untuk python, spasi lebih disukai, lihat tautan yang saya maksud.
zdan

21

Setiap kali saya menemukan kesalahan ini, itu karena saya entah bagaimana mencampur tab dan spasi di editor saya.


13

Jika Anda menggunakan editor IDLE Python, Anda dapat melakukan seperti yang disarankan dalam salah satu pesan kesalahan serupa:

1) pilih semua, misalnya Ctrl+A

2) Buka Format -> Wilayah Untabify

3) Periksa kembali indentasi Anda masih benar, simpan dan jalankan kembali program Anda.

Saya menggunakan Python 2.5.4


9

Jika Anda menggunakan Vim, tekan escape dan ketik

gg = G

Auto ini membuat semua indentasi dan menjernihkan semua ruang yang Anda masukkan.


8

Baris: result = result * iharus di indentasi (ini adalah badan for-loop).

Atau - Anda memiliki ruang campuran dan karakter tab


Saya harus mengubah pengeditan di SO, aneh. Lihat catatan "Edit" saya yang diperbarui dalam pertanyaan
cbrulak

Ok, jadi saya percaya bahwa baris kedua dari jawaban saya benar - Anda memiliki ruang campuran dan karakter tab (masing-masing 32 dan 8 dalam ASCII)
Abgan

5

Di Atom

pergi ke

Packages > Whitespace > Convert Spaces to Tabs

Kemudian periksa lagi lekukan file Anda:

python -m tabnanny yourFile.py

atau

>python
>>> help("yourFile.py")

4

Tampaknya menjadi masalah lekukan. Anda tidak harus mencocokkan kurung keriting dengan Python tetapi Anda harus harus mencocokkan tingkat lekukan.

Cara terbaik untuk mencegah masalah ruang / tab adalah menampilkan karakter yang tidak terlihat dalam editor teks Anda. Ini akan memberi Anda cara cepat untuk mencegah dan / atau menyelesaikan kesalahan terkait lekukan.

Juga, menyuntikkan kode yang disalin adalah sumber umum untuk jenis masalah ini.


4

Jika Anda menggunakan notepad ++, lakukan "ganti" dengan mode pencarian diperluas untuk menemukan \ t dan ganti dengan empat spasi.


2

untuk Pengguna Atom, Packages ->whitspace -> remove trailing whitespaces ini bekerja untuk saya


2

Hanya tambahan. Saya memiliki masalah yang sama dengan kedua lekukan di Notepad ++.

  1. Lekukan yang tidak terkecuali
  2. Tingkat Indentasi Luar

    Buka ----> Cari tab ----> ketuk ganti ----> tekan tombol radio Diperpanjang bawah ---> Sekarang ganti \ t dengan empat spasi

    Buka ----> Cari tab ----> ketuk ganti ----> tekan tombol radio Diperpanjang di bawah ---> Sekarang ganti \ n dengan apa-apa


2

Saya menggunakan notebook Jupyter dan mencoba hampir semua solusi di atas (beradaptasi dengan skenario saya) untuk tidak digunakan. Saya kemudian pergi baris demi baris, menghapus semua spasi untuk setiap baris dan diganti dengan tab. Itu memecahkan masalah.


2

Untuk pengguna Spyder goto Source> Fix Indentation untuk segera memperbaiki masalah tersebut


1

Bisa jadi karena fungsi di atasnya tidak lekukan dengan cara yang sama. yaitu

class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")

1

Saya memiliki masalah yang sama kemarin, itu kesalahan lekukan, menggunakan editor teks luhur. Butuh berjam-jam saya mencoba memperbaikinya dan pada akhirnya saya menyalin kode ke editor teks VI dan itu bekerja dengan baik. ps python terlalu sensitif spasi, pastikan untuk tidak mencampur ruang dan tab.


1

Karena saya menyadari tidak ada jawaban khusus untuk spyder, saya akan menambahkan satu: Pada dasarnya, hati-hati melihat ifpernyataan Anda dan pastikan semua if, elifdan elsememiliki jarak yang sama yaitu mereka berada di baris yang sama di awal seperti:

def your_choice(answer):
    if answer>5:
        print("You're overaged")
    elif answer<=5 and answer>1: 
            print("Welcome to the toddler's club!")
    else:
            print("No worries mate!")

1

Saya memiliki fungsi yang ditentukan, tetapi tidak memiliki konten apa pun selain dari komentar fungsinya ...

def foo(bar):
    # Some awesome temporary comment.
    # But there is actually nothing in the function!
    # D'Oh!

Teriaknya:

  File "foobar.py", line 69

                                ^
IndentationError: expected an indented block

(perhatikan bahwa garis tersebut ^ ditunjukkan tanda kosong)

-

Beberapa solusi:

1: Cukup komentari fungsinya

2: Tambahkan komentar fungsi

def foo(bar):
    '' Some awesome comment. This comment could be just one space.''

3: Tambahkan baris yang tidak melakukan apa-apa

def foo(bar):
    0

Bagaimanapun, pastikan untuk membuatnya jelas mengapa ini adalah fungsi kosong - untuk Anda sendiri, atau untuk rekan-rekan Anda yang akan menggunakan kode Anda


The pernyataan lulus dapat berguna ada :)
KevinG

1

Pertama, hanya untuk mengingatkan Anda ada kesalahan logis Anda lebih baik menjaga hasil = 1 atau output Anda akan menjadi hasil = 0 bahkan setelah loop berjalan.

Kedua, Anda dapat menulis seperti ini:

import sys

def Factorial(n): # Return factorial
  result = 0
  for i in range (1,n):
     result = result * i

  print "factorial is ",result
  return result

Meninggalkan sebuah baris akan memberi tahu shell python bahwa pernyataan FOR telah berakhir. Jika Anda memiliki pengalaman menggunakan shell python maka Anda dapat memahami mengapa kami harus meninggalkan garis.


1

Untuk apa nilainya, dokumen saya terlalu banyak indentasi dan ini juga melemparkan kesalahan yang sama

class junk: 
     """docstring is indented too much""" 
    def fun(): return   

IndentationError: unindent does not match any outer indentation level


ini memperbaiki masalah saya
bhordupur

0

Ini karena ada perpaduan tab dan spasi. Anda dapat menghapus semua spasi dan menggantinya dengan tab.

Atau, Coba tulis ini:

#!/usr/bin/python -tt

di awal kode. Baris ini menyelesaikan perbedaan antara tab dan spasi.



0

Jika Anda menggunakan editor Komodo, Anda dapat melakukan seperti yang disarankan di salah satu pesan kesalahan serupa:

1) pilih semua, mis. Ctrl + A

2) Buka Kode -> Wilayah Untabify

3) Periksa kembali indentasi Anda masih benar, simpan dan jalankan kembali program Anda.

Saya menggunakan Python 3.4.2


0

Jika Anda menggunakan teks Sublime untuk pengembangan python, Anda dapat menghindari kesalahan dengan menggunakan paket Anaconda. Setelah menginstal Anaconda,

  1. buka file Anda dengan luhur
  2. klik kanan pada ruang terbuka
  3. pilih anaconda
  4. klik pada autoformat
  5. SELESAI Atau Tekan CTRL + ALT + R.

0

Di intellij dengan plugin python, Ctrl + Shift + Alt untuk memformat ulang dokumen memperbaiki masalah indent / tab / spasi


0

Untuk pengguna SPYDER : Saya menggunakan spyder 3.3.2 dengan python 3.7.1 dan saya memecahkan ini, mengatur lekukan untuk menggunakan tab, dengan langkah-langkah berikut, klik pada:

  • Alat.
  • Preferensi.
  • Editor.
  • Pengaturan lanjutan.
  • Karakter lekukan -> Tab.

Lalu saya setel ulang baris "tak dikenal" menggunakan tombol tab.

Untuk beberapa alasan, tanpa pengaturan ini, saya mendapatkan hantu IndentationError kadang-kadang.


0

Sebagai contoh:

1. def convert_distance(miles):
2.   km = miles * 1.6
3.   return km

Dalam kode ini situasi yang sama terjadi pada saya. Hapus saja spasi indentasi sebelumnya pada baris 2 dan 3, lalu gunakan tab atau spasi. Jangan pernah gunakan keduanya . Berikan lekukan yang tepat saat menulis kode dengan python. Untuk Sumber goto Spyder> Perbaiki Indentasi. Hal yang sama berlaku untuk Kode VC dan teks luhur atau editor lainnya. Perbaiki indentasi.


-6

Ini terjadi terutama karena editor. Coba ubah tab ke spasi (4). IDE atau Editor python terbaik adalah pycharm, sublim, vim untuk linux.
bahkan saya juga pernah mengalami masalah yang sama, kemudian saya menemukan bahwa ada masalah pengkodean. Saya sarankan Anda juga mengubah editor Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.