Hướng dẫn taberror python - trăn taberror

Không gian không được coi là tương đương với tab. Một dòng thụt vào với một tab nằm ở một vết lõm khác nhau từ một dòng thụt vào với 1, 2, 4 hoặc 8 không gian.

Nội phân Chính showShow

  • Vết lõm
  • Một số lập trình viên chỉ muốn trộn các tab và không gian
  • Cậu thụt không phải lúc nào cũng quan trọng
  • Cùng một khối? Vấn đề thụt.
  • Quy tắc thụt cho từng dòng mã
  • Còn tab và không gian thì sao?
  • Tab Stops là 8 ký tự
  • Tab: Không phải lúc nào cũng 8 khoảng trống
  • Định cấu hình trình soạn thảo của bạn
  • Đừng sử dụng Python 3
  • Kết thúc cuộc đời cho Python 2.7: 2020
  • Không trộn các tab và không gian
  • Có bao nhiêu không gian là một tab trong Python?
  • Không gian và tab là gì?
  • Tab Python là gì?
  • Bạn có thể sử dụng tab để thụt vào trong Python không?

Bằng chứng bằng ví dụ đối phó (sai lầm, hoặc, tốt nhất, Tab - Tab! = 4 không gian):

x = 1
if x == 1:
^Iprint "fff\n"
    print "yyy\n"

'

  File "xx.py", line 4
    print "yyy\n"
                ^
IndentationError: unindent does not match any outer indentation level
4' hiển thị một tab. Khi chạy qua Python 2.5, tôi gặp lỗi:

  File "xx.py", line 4
    print "yyy\n"
                ^
IndentationError: unindent does not match any outer indentation level

Do đó, cho thấy rằng trong Python 2.5, các tab không bằng không gian (và đặc biệt không bằng 4 khoảng trắng).


Rất tiếc - xấu hổ; Bằng chứng của tôi bằng ví dụ đối với các tab không tương đương với 4 khoảng trống. Như Alex Martelli chỉ ra trong một bình luận, trong Python 2, các tab tương đương với 8 không gian và điều chỉnh ví dụ với một tab và 8 không gian cho thấy đây thực sự là trường hợp.

x = 1
if x != 1:
^Iprint "x is not 1\n"
        print "y is unset\n"

Trong Python 2, mã này hoạt động, không có gì in.


Trong Python 3, các quy tắc hơi khác nhau (như được ghi nhận bởi Antti haapala). So sánh:

  • Python 2 trên thụt
  • Python 3 trên thụt

Python 2 nói:

Đầu tiên, các tab được thay thế (từ trái sang phải) bằng một đến tám khoảng trống sao cho tổng số ký tự lên đến và bao gồm cả sự thay thế là bội số của tám (điều này được dự định là quy tắc tương tự như được sử dụng bởi Unix). Tổng số không gian trước ký tự không trống đầu tiên sau đó xác định thụt dòng. Thắng không thể được phân chia trên nhiều dòng vật lý bằng cách sử dụng dấu gạch chéo ngược; khoảng trắng lên đến dấu gạch chéo ngược đầu tiên xác định thụt lề.

Python 3 nói:

Các tab được thay thế (từ trái sang phải) bằng một đến tám khoảng trống sao cho tổng số ký tự lên đến và bao gồm cả sự thay thế là bội số của tám (điều này được dự định là quy tắc tương tự như được sử dụng bởi UNIX). Tổng số không gian trước ký tự không trống đầu tiên sau đó xác định thụt dòng. Thắng không thể được phân chia trên nhiều dòng vật lý bằng cách sử dụng dấu gạch chéo ngược; khoảng trắng lên đến dấu gạch chéo ngược đầu tiên xác định thụt lề.

(Ngoài từ mở đầu "Đầu tiên", những thứ này giống hệt nhau.)

Python 3 thêm một đoạn văn bổ sung:

Thắng bị từ chối là không nhất quán nếu một tệp nguồn trộn các tab và không gian theo cách làm cho ý nghĩa phụ thuộc vào giá trị của một tab trong không gian; Một taberror được nuôi dưỡng trong trường hợp đó.

Điều này có nghĩa là ví dụ Tab vs 8-Space hoạt động trong Python 2 sẽ tạo ra một điều taberror trong Python 3. Tốt nhất-cần thiết trong Python 3-để đảm bảo rằng chuỗi các ký tự tạo ra vết lõm trên mỗi dòng trong một khối là giống hệt nhau. PEP8 cho biết 'Sử dụng 4 không gian trên mỗi cấp độ thụt'. (Tiêu chuẩn mã hóa của Google cho biết 'Sử dụng 2 không gian'.)

Này các cậu,

Tôi đã làm theo một hướng dẫn về Python nơi họ bảo chúng tôi sử dụng các tab nhưng sau đó họ đã gửi chúng tôi đến Hướng dẫn kiểu PEP8 nơi nó tuyên bố:

"Không gian là phương pháp thụt đầu tiên ưa thích."

Bây giờ, sau khi tôi đào xung quanh một chút, tôi thấy rằng bạn nên sử dụng 4 khoảng trống để thụt mã, quá ...

Tại sao không sử dụng tab thay vì nhấn thanh không gian 4 lần?

Tôi đoán đây là một chủ đề nóng, nhưng tôi chỉ muốn chắc chắn rằng nó ổn khi đi với các tab trên không gian (vì đó là cùng một chiều dài!). .

/ @treyhunner

Vết lõm

  • Các lập trình viên sử dụng vết lõm để làm cho mã có thể đọc được
  • Python sử dụng vết lõm để xác định các khối mã
  • Python cho phép các tab hoặc không gian để thụt vào
  • Tại sao không cả hai? 😈 😈

Một số lập trình viên chỉ muốn trộn các tab và không gian

Hướng dẫn taberror python - trăn taberror

Cậu thụt không phải lúc nào cũng quan trọng


def flatten(matrix):
  return [
            n for row
 in matrix for n
       in row
     ]
              
def len_or_none(obj):
   try:
         return len(obj)
   except TypeError:
     return None

Cùng một khối? Vấn đề thụt.


def guess_number():
  while True:
     guess = input('Guess: ')
    if guess == '4':
        break
              
def len_or_none(obj):
  try:
      return len(obj)
    except TyperError:
      return None

Quy tắc thụt cho từng dòng mã

  1. Còn tab và không gian thì sao?: last line's indentation level
  2. Tab Stops là 8 ký tự: a previous less-indented level
  3. Tab: Không phải lúc nào cũng 8 khoảng trống: more indented than current indentation

Còn tab và không gian thì sao?

  • Tab Stops là 8 ký tựtab stop
  • Tab: Không phải lúc nào cũng 8 khoảng trống8 characters
  • Định cấu hình trình soạn thảo của bạn

Tab Stops là 8 ký tự


def guess_number():
    while True:
	guess = input('Guess: ')
	if guess == '4':
	    break
              

def guess_number():
    while True:
        guess = input('Guess: ')
	if guess == '4':
	    break
              

Tab: Không phải lúc nào cũng 8 khoảng trống


def guess_number():
    while True:
	guess = input('Guess: ')
	if guess == '4':
	    break
              
  File "xx.py", line 4
    print "yyy\n"
                ^
IndentationError: unindent does not match any outer indentation level
0
  File "xx.py", line 4
    print "yyy\n"
                ^
IndentationError: unindent does not match any outer indentation level
1

Định cấu hình trình soạn thảo của bạn

  File "xx.py", line 4
    print "yyy\n"
                ^
IndentationError: unindent does not match any outer indentation level
2

Đừng sử dụng Python 3

  File "xx.py", line 4
    print "yyy\n"
                ^
IndentationError: unindent does not match any outer indentation level
3

Kết thúc cuộc đời cho Python 2.7: 2020

Kết thúc cuộc đời cho Python 2.7: 2020

Không trộn các tab và không gian

Có bao nhiêu không gian là một tab trong Python?

Không gian và tab là gì?
http://truthful.technology

Có bao nhiêu không gian là một tab trong Python?

Java và Python có các quy tắc khác nhau về số lượng không gian một tab trong một chuỗi. Trong Java, một tab là hai không gian, trong khi ở Python, đó là một. Nó có thể là một chút đau nếu bạn đã quen làm việc với các chuỗi bằng cả hai ngôn ngữ, vì bạn có thể phải điều chỉnh mã của mình mỗi khi bạn chuyển đổi giữa chúng.In Java, a tab is two spaces, while in Python, it's one. It can be a bit of a pain if you're used to working with strings in both languages, as you might have to adjust your code every time you switch between them.

Không gian và tab là gì?

Mã được chia thành các dòng chữ và ký hiệu trên một trang, giao tiếp với máy tính, iPad, điện thoại thông minh, bạn đặt tên cho nó phải làm gì. Bạn thấy, với khoảng trắng, bạn định dạng từng dòng mã bằng cách sử dụng SpaceBar. Trong khi, với các tab, bạn sắp xếp nó với phím tab. Sự khác biệt cơ học nhỏ, hậu quả lớn.with spaces, you format each line of code using the spacebar. While, with tabs, you aligning it with the tab key. Small mechanical difference, big consequences.

Tab Python là gì?

Tab Python được chia thành hai phần: ngăn đầu vào và ngăn đầu ra. Ngăn đầu vào, phần dưới của tab, được sử dụng để nhập và thực hiện các câu lệnh Python của bạn. Khi bạn đã thực hiện điều này, câu lệnh và đầu ra xuất hiện trong khung đầu ra, phần trên của tab.. The input pane, the lower part of the tab, is used to type in and execute your Python statements. When you've done this, the statement and the output appears in the output pane, the upper part of the tab.

Bạn có thể sử dụng tab để thụt vào trong Python không?

Quy tắc thụt python Dòng đầu tiên của mã Python không thể có vết lõm. Thắng là bắt buộc trong Python để xác định các khối của các câu lệnh. Số lượng không gian phải đồng đều trong một khối mã. Nó được ưu tiên sử dụng khoảng trắng thay vì các tab để thụt vào trong Python.It is preferred to use whitespaces instead of tabs to indent in python.