01/10/2018, 09:55

Lỗi IndentationError: unindent does not match any outer indentation level trong Python

Anh ơi sau đoạn mã dưới đây em vieets đúng như trên video python của anh laptrinh io mà sao máy lại báo lỗi sai thế

 #!/usr/local/bin/python3

def tong(ds):
	tong = 0
    for i in ds:
        tong += i
    return tong 

ket_qua = tong([1,2,3])
print("Ket qua la " + str(ket_qua))

máy em báo lỗi là :

File “. est1.py”, line 5
for i in ds:
^
IndentationError: unindent does not match any outer indentation level

San Fransisco viết 12:12 ngày 01/10/2018

KYN viết 12:05 ngày 01/10/2018

IndentationError - chú ý độ thụt dòng khi gõ dòng code mới :

Python không cung cấp các dấu ngoặc ôm ({}) để chỉ các khối code cho định nghĩa lớp hoặc hàm hoặc điều khiển luồng. Các khối code được nhận biết bởi độ thụt dòng code (indentation) trong Python và đây là điều bắt buộc.

Số khoảng trống trong độ thụt dòng là biến đổi, nhưng tất cả các lệnh bên trong khối phải được thụt cùng một số lượng khoảng trống như nhau

San Fransisco viết 11:56 ngày 01/10/2018

San Fransisco viết 12:07 ngày 01/10/2018

em không bik sao nó báo lỗi hoài

KYN viết 11:58 ngày 01/10/2018

lùi dòng tong = 0 lại = với for..

San Fransisco viết 12:01 ngày 01/10/2018

dạ em lùi rồi nó vẫn v ạ

KYN viết 12:09 ngày 01/10/2018
def tong(ds):
    tong = 0
    for i in ds:
        tong +=i
    return tong

ketqua = tong([1,2,3])
print(ketqua)

như này đâu có sao
dùng sublime thì cài các add-on vào tự save code, check pep 8 các kiểu
chả nhớ cái nào nữa, ví dụ tạm https://packagecontrol.io/packages/auto-save

San Fransisco viết 12:01 ngày 01/10/2018

em đã làm giống anh mà sao máy cứ báo lỗi ở dòng for i in ds: nó cứ báo lỗi ở chỗ dấu :

KYN viết 11:58 ngày 01/10/2018

bạn xóa code, gõ lại thử xem

San Fransisco viết 11:58 ngày 01/10/2018

nó vẫn v anh ơi :(((

HK boy viết 11:57 ngày 01/10/2018

Biến tong chỉ lùi 1 tab thôi.
Mà tên hàm là tong thì đặt tên biến là tong làm gì -_-

Sửa 1 tí: bạn thống nhất cách indent trong code Python nhé. Dùng 4 space hoặc dùng 1 tab.
Code kia của bạn vừa dùng tab vừa dùng 4-space. Mình có bôi đen từng kí tự căn dòng của bạn thì thấy.
Chuẩn PEP 8 thì dùng 4 space (hình như thế, hồi mới code Python mình bị báo lỗi suốt).

San Fransisco viết 12:01 ngày 01/10/2018

à em làm được rồi thanks anh thì ra là vậy

San Fransisco viết 12:05 ngày 01/10/2018

mà anh ơi làm sao để thụt đầu dòng đúng ạ

HK boy viết 12:09 ngày 01/10/2018

Nhìn vào góc phải của sublime text
Click vào đó, chọn Indent using spacesTab size: 4
Đó là cách để thống nhất cách indent.

Muốn chuyển đổi tab thành space thì chọn Convert indentation to spaces

Còn để indent đúng thì phải nắm được mình code cái gì, code block (- khối code) như thế nào, các lệnh nằm trong hàm nào, if/for/while nào…
Phải code nhiều và phải hiểu code mình viết.

San Fransisco viết 12:08 ngày 01/10/2018

mỗi hàm có 1 kiểu thụt đầu dòng riêng hả anh ???

HK boy viết 11:57 ngày 01/10/2018

Bạn không hiểu về indent trong python rồi…
Indent phụ thuộc vào hàm, chứ không phải là mỗi hàm có kiểu indent riêng…
Ví dụ như:

you = 1
def fun():
    print "love me"
    if you == 1:
        print "once"
    else:
        print "sometimes"

fun()

print "love me", if you == 1 và cái else kia là cùng lùi vào 1 tab so với def fun(); bên trong if và bên trong else, các hàm print "once"print "sometimes" cùng lùi vào 1 tab so với if và else, nhưng là lùi vào 2 tab so với def fun()

San Fransisco viết 12:07 ngày 01/10/2018

à em hiểu rồi vậy còn cái nữa là có vài dòng code em thấy người ta hay viết liên tục mà tự nhiên lại cách 1 dòng rồi mới viết tiếp giống như dòng cuối cùng của đoạn code trên sao fun() lại phải cách dòng ạ

HK boy viết 12:01 ngày 01/10/2018

Cách dòng cho vui thôi =))
Đùa đấy, nếu thấy khó nhìn quá thì cách thêm 1 dòng, chẳng sao cả.
Lưu ý chuẩn PEP 8: Trước và sau 1 def (hàm) phải có 2 dấu xuống dòng.

p/s: bạn viết câu cú chả có dấu phẩy dấu chấm gì cả -_-

San Fransisco viết 12:10 ngày 01/10/2018

ủa sao cái đoạn code trên của em cái dòng return tổng em thụt sai thì chạy code vẫn được mà kết quả ra là 1 còn em sửa lại đúng thì ms là 6 , vậy thụt đầu dòng sai cũng có ảnh hưởng tới kết quả hả anh

HK boy viết 12:09 ngày 01/10/2018

Python quan trọng nhất là cái indent mà -_-
Mà lần sau đừng đặt tên biến trùng tên hàm.
Nói chung là code bạn sai vì nhiều cái, chứ không phải chỉ vì indent sai.

Bài liên quan
0