Câu lệnh khác không thực thi Python

Trong Python, từ khóa

>>> if 1 + 1 == 3:
..     pass
...
3 tự nó là toàn bộ câu lệnh. tuyên bố này. nó bị loại bỏ trong giai đoạn biên dịch byte. Nhưng đối với một câu lệnh không làm gì cả, câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3 của Python hữu ích một cách đáng ngạc nhiên

Đôi khi

>>> if 1 + 1 == 3:
..     pass
...
3 hữu ích trong mã cuối cùng chạy trong sản xuất. Thường xuyên hơn,
>>> if 1 + 1 == 3:
..     pass
...
3 hữu ích như giàn giáo trong khi phát triển mã. Trong những trường hợp cụ thể, có những lựa chọn thay thế tốt hơn để không làm gì cả

Trong hướng dẫn này, bạn sẽ học

  • Câu lệnh
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 của Python là gì và tại sao nó hữu ích
  • Cách sử dụng câu lệnh Python
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 trong mã sản xuất
  • Cách sử dụng câu lệnh Python
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 như một công cụ hỗ trợ trong khi phát triển mã
  • Các lựa chọn thay thế cho
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 là gì và khi nào bạn nên sử dụng chúng

Tiền thưởng miễn phí. Nhấp vào đây để nhận Bảng cheat Python và tìm hiểu kiến ​​thức cơ bản về Python 3, như làm việc với các kiểu dữ liệu, từ điển, danh sách và hàm Python

Tuyên bố Python
>>> if 1 + 1 == 3:
..     pass
...
3. Cú pháp và ngữ nghĩa

Theo cú pháp Python, các khối thụt lề mới theo sau ký tự dấu hai chấm [

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
2]. Có một số nơi mà một khối thụt lề mới sẽ xuất hiện. Khi bạn bắt đầu viết mã Python, những vị trí phổ biến nhất là sau từ khóa
def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 và sau từ khóa
def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
4

>>>

>>> for x in [1, 2, 3]:
..     y = x + 1
..     print[x, y]
...
1 2
2 3
3 4

Sau câu lệnh

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
4 là phần thân của vòng lặp
def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
4, bao gồm hai dòng thụt vào ngay sau dấu hai chấm

Trong trường hợp này, có hai câu lệnh trong phần thân được lặp lại cho mỗi giá trị

  1. def get_and_save_middle[data, fname]:
        middle = data[len[data]//3:2*len[data]//3]
        save_to_file[middle, fname]
        return middle
    
    7
  2. def get_and_save_middle[data, fname]:
        middle = data[len[data]//3:2*len[data]//3]
        save_to_file[middle, fname]
        return middle
    
    8

Các câu lệnh bên trong loại khối này về mặt kỹ thuật được gọi là một bộ trong ngữ pháp Python. Một bộ phải bao gồm một hoặc nhiều câu lệnh. Không được để trống

Để không làm gì bên trong một bộ, bạn có thể sử dụng câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 đặc biệt của Python. Tuyên bố này chỉ bao gồm từ khóa duy nhất
>>> if 1 + 1 == 3:
..     pass
...
3. Mặc dù bạn có thể sử dụng
>>> if 1 + 1 == 3:
..     pass
...
3 ở nhiều nơi trong Python nhưng không phải lúc nào nó cũng hữu ích

>>>

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected

Trong câu lệnh

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 này, việc loại bỏ câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3 sẽ giữ nguyên chức năng và làm cho mã của bạn ngắn hơn. Bạn có thể thắc mắc tại sao cú pháp Python bao gồm một câu lệnh yêu cầu trình thông dịch không làm gì cả. Bạn không thể đạt được kết quả tương tự bằng cách không viết một tuyên bố nào sao?

Trong một số trường hợp, việc yêu cầu Python không làm gì một cách rõ ràng phục vụ một mục đích quan trọng. Ví dụ: vì câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 không làm gì cả, nên bạn có thể sử dụng nó để đáp ứng yêu cầu rằng một bộ bao gồm ít nhất một câu lệnh

>>>

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block

Ngay cả khi bạn không muốn thêm bất kỳ mã nào bên trong khối

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3, thì khối
def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 không có câu lệnh nào sẽ tạo ra một bộ trống, đó là cú pháp Python không hợp lệ

Để khắc phục điều này, bạn có thể sử dụng

>>> if 1 + 1 == 3:
..     pass
...
3

>>>

>>> if 1 + 1 == 3:
..     pass
...

Bây giờ, nhờ có

>>> if 1 + 1 == 3:
..     pass
...
3, câu lệnh
def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 của bạn là cú pháp Python hợp lệ

Loại bỏ các quảng cáo

Sử dụng tạm thời của
>>> if 1 + 1 == 3:
..     pass
...
3

Có nhiều tình huống trong đó

>>> if 1 + 1 == 3:
..     pass
...
3 có thể hữu ích cho bạn khi bạn đang phát triển, ngay cả khi nó không xuất hiện trong phiên bản cuối cùng của mã của bạn. Giống như giàn giáo,
>>> if 1 + 1 == 3:
..     pass
...
3 có thể hữu ích để giữ cấu trúc chính của chương trình trước khi bạn điền thông tin chi tiết

Nghe có vẻ lạ khi viết mã mà sau này sẽ bị xóa, nhưng làm mọi việc theo cách này có thể đẩy nhanh tốc độ phát triển ban đầu của bạn

Mật Mã Tương Lai

Có nhiều trường hợp cấu trúc của mã yêu cầu hoặc có thể sử dụng một khối. Mặc dù cuối cùng bạn có thể phải viết mã ở đó, nhưng đôi khi rất khó để thoát khỏi luồng làm việc trên một thứ gì đó cụ thể và bắt đầu làm việc trên một phần phụ thuộc. Trong những trường hợp này, câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 là một cách hữu ích để thực hiện khối lượng công việc tối thiểu cho người phụ thuộc để bạn có thể quay lại công việc đang làm

Ví dụ cụ thể, hãy tưởng tượng viết một hàm xử lý một chuỗi và sau đó cả hai ghi kết quả vào một tệp và trả về nó

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle

Hàm này lưu và trả về phần ba ở giữa của chuỗi. Bạn không cần hoàn thành triển khai

if idx % 15 == 0:
    pass # Fizz-Buzz
elif idx % 3 == 0:
    pass # Fizz
elif idx % 5 == 0:
    pass # Buzz
else:
    pass # Idx
4 trước khi có thể kiểm tra đầu ra để tìm lỗi riêng lẻ. Tuy nhiên, nếu
if idx % 15 == 0:
    pass # Fizz-Buzz
elif idx % 3 == 0:
    pass # Fizz
elif idx % 5 == 0:
    pass # Buzz
else:
    pass # Idx
4 không tồn tại ở một dạng nào đó, thì bạn sẽ gặp lỗi

Có thể nhận xét cuộc gọi tới

if idx % 15 == 0:
    pass # Fizz-Buzz
elif idx % 3 == 0:
    pass # Fizz
elif idx % 5 == 0:
    pass # Buzz
else:
    pass # Idx
4, nhưng sau đó bạn phải nhớ bỏ ghi chú cuộc gọi sau khi xác nhận rằng
if idx % 15 == 0:
    pass # Fizz-Buzz
elif idx % 3 == 0:
    pass # Fizz
elif idx % 5 == 0:
    pass # Buzz
else:
    pass # Idx
7 hoạt động tốt. Thay vào đó, bạn có thể nhanh chóng triển khai
if idx % 15 == 0:
    pass # Fizz-Buzz
elif idx % 3 == 0:
    pass # Fizz
elif idx % 5 == 0:
    pass # Buzz
else:
    pass # Idx
4 bằng câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3

def save_to_file[data, fname]:
    pass # TODO: fill this later

Chức năng này không làm bất cứ điều gì, nhưng nó cho phép bạn kiểm tra

if idx % 15 == 0:
    pass # Fizz-Buzz
elif idx % 3 == 0:
    pass # Fizz
elif idx % 5 == 0:
    pass # Buzz
else:
    pass # Idx
7 mà không có lỗi

Một trường hợp sử dụng khác cho

>>> if 1 + 1 == 3:
..     pass
...
3 là khi bạn đang viết một cấu trúc điều khiển luồng phức tạp và bạn muốn có một trình giữ chỗ cho mã trong tương lai. Ví dụ: khi thực hiện thử thách fizz-buzz với toán tử modulo, trước tiên bạn nên hiểu cấu trúc của mã

if idx % 15 == 0:
    pass # Fizz-Buzz
elif idx % 3 == 0:
    pass # Fizz
elif idx % 5 == 0:
    pass # Buzz
else:
    pass # Idx

Cấu trúc này xác định những gì sẽ được in trong từng trường hợp, cung cấp cho bạn bộ khung của giải pháp. Các khung cấu trúc như vậy rất hữu ích khi cố gắng tìm ra logic phân nhánh trong đó cần có các câu lệnh

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 và theo thứ tự nào

Ví dụ, trong trường hợp này, một cái nhìn sâu sắc quan trọng là câu lệnh

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 đầu tiên cần kiểm tra tính chia hết cho
def fizz_buzz[idx]:
    if idx % 15 == 0:
        print["fizz-buzz"]
    elif idx % 3 == 0:
        print["fizz"]
    elif idx % 5 == 0:
        print["buzz"]
    else:
        print[idx]
4 bởi vì bất kỳ số nào chia hết cho
def fizz_buzz[idx]:
    if idx % 15 == 0:
        print["fizz-buzz"]
    elif idx % 3 == 0:
        print["fizz"]
    elif idx % 5 == 0:
        print["buzz"]
    else:
        print[idx]
4 cũng sẽ chia hết cho
def fizz_buzz[idx]:
    if idx % 15 == 0:
        print["fizz-buzz"]
    elif idx % 3 == 0:
        print["fizz"]
    elif idx % 5 == 0:
        print["buzz"]
    else:
        print[idx]
6 và
def fizz_buzz[idx]:
    if idx % 15 == 0:
        print["fizz-buzz"]
    elif idx % 3 == 0:
        print["fizz"]
    elif idx % 5 == 0:
        print["buzz"]
    else:
        print[idx]
7. Cái nhìn sâu sắc về cấu trúc này rất hữu ích bất kể chi tiết của đầu ra cụ thể

Sau khi tìm ra logic cốt lõi của vấn đề, bạn có thể quyết định xem mình sẽ

def fizz_buzz[idx]:
    if idx % 15 == 0:
        print["fizz-buzz"]
    elif idx % 3 == 0:
        print["fizz"]
    elif idx % 5 == 0:
        print["buzz"]
    else:
        print[idx]
8 trực tiếp trong mã hay không

def fizz_buzz[idx]:
    if idx % 15 == 0:
        print["fizz-buzz"]
    elif idx % 3 == 0:
        print["fizz"]
    elif idx % 5 == 0:
        print["buzz"]
    else:
        print[idx]

Hàm này rất dễ sử dụng vì nó in trực tiếp các chuỗi. Tuy nhiên, nó không phải là một chức năng thú vị để kiểm tra. Đây có thể là một sự đánh đổi hữu ích. Tuy nhiên, trong các cuộc phỏng vấn mã hóa, người phỏng vấn đôi khi sẽ yêu cầu bạn viết bài kiểm tra. Viết cấu trúc trước cho phép bạn đảm bảo rằng bạn hiểu luồng logic trước khi kiểm tra xem các yêu cầu khác là gì

Một cách khác là viết một hàm trả về chuỗi và sau đó thực hiện vòng lặp ở nơi khác

def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]

Chức năng này đẩy chức năng in lên ngăn xếp và dễ kiểm tra hơn

Tìm ra các điều kiện cốt lõi và cấu trúc của vấn đề bằng cách sử dụng

>>> if 1 + 1 == 3:
..     pass
...
3 giúp dễ dàng hơn trong việc quyết định chính xác cách triển khai sẽ hoạt động sau này

Cách tiếp cận này cũng hữu ích khi. Nếu bạn cần viết một lớp để thực hiện điều gì đó, nhưng bạn không hiểu đầy đủ về miền vấn đề, thì trước tiên bạn có thể sử dụng

>>> if 1 + 1 == 3:
..     pass
...
3 để hiểu bố cục tốt nhất cho kiến ​​trúc mã của mình

Ví dụ: hãy tưởng tượng bạn đang triển khai một lớp

def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]
1, nhưng các thuộc tính bạn cần không rõ ràng. Cuối cùng, bạn sẽ cần tiến hành một số phân tích yêu cầu cẩn thận, nhưng trong khi triển khai các thuật toán cơ bản, bạn có thể thấy rõ rằng lớp chưa sẵn sàng

class Candy:
    pass

Điều này cho phép bạn khởi tạo các thành viên của lớp và chuyển chúng xung quanh mà không cần phải quyết định thuộc tính nào có liên quan đến lớp

Loại bỏ các quảng cáo

Mã nhận xét

Khi bạn nhận xét mã, có thể làm mất hiệu lực cú pháp bằng cách xóa tất cả mã trong một khối. Nếu bạn có một điều kiện

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 …
def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]
3, thì có thể hữu ích khi nhận xét một trong các nhánh

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
0

Trong ví dụ này,

def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]
4 chạy mã mất nhiều thời gian, chẳng hạn như nhân các mảng số lớn. Trong khi bạn đang gỡ lỗi, bạn có thể cần tạm thời nhận xét cuộc gọi
def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]
4

Ví dụ: có thể bạn muốn chạy mã này với một số dữ liệu có vấn đề và xem tại sao có quá nhiều giá trị không phải là

def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]
6 bằng cách kiểm tra nhật ký để biết mô tả. Bỏ qua tính toán tốn kém cho các giá trị hợp lệ sẽ tăng tốc độ kiểm tra lên một chút

Tuy nhiên, đây không phải là mã hợp lệ

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
1

Trong ví dụ này, nhánh

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 không có bất kỳ câu lệnh nào trong đó. Nhận xét bị loại bỏ sớm trong quá trình phân tích cú pháp, trước khi thụt đầu dòng được kiểm tra để xem nơi bắt đầu và kết thúc khối

Trong trường hợp này, thêm một câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 làm cho mã hợp lệ

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
2

Giờ đây, có thể chạy mã, bỏ qua tính toán tốn kém và tạo nhật ký với thông tin hữu ích

Nhận xét một phần mã trong khi hành vi khắc phục sự cố hữu ích trong nhiều trường hợp. Trong trường hợp như ví dụ trên, bạn có thể nhận xét mã mất nhiều thời gian để xử lý và không phải là nguồn gốc của vấn đề

Một tình huống khác mà bạn có thể muốn nhận xét mã trong khi khắc phục sự cố là khi mã được nhận xét có mục đích không mong muốn, chẳng hạn như gửi email hoặc cập nhật bộ đếm

Tương tự, đôi khi sẽ rất hữu ích khi nhận xét toàn bộ chức năng trong khi vẫn tiếp tục cuộc gọi. Nếu bạn đang sử dụng thư viện cần gọi lại, thì bạn có thể viết mã như thế này

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
3

Mã này gọi

def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]
9 và đính kèm một cuộc gọi lại vào kết quả

Có thể hữu ích khi chạy thử loại bỏ dữ liệu để đảm bảo rằng nguồn được cung cấp chính xác. Tuy nhiên, đây không phải là mã Python hợp lệ

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
4

Vì hàm không có câu lệnh nào trong khối nên Python không thể phân tích cú pháp mã này

Một lần nữa,

>>> if 1 + 1 == 3:
..     pass
...
3 có thể giúp bạn

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
5

Đây là mã Python hợp lệ sẽ loại bỏ dữ liệu và giúp bạn xác nhận rằng các đối số là chính xác

Loại bỏ các quảng cáo

Điểm đánh dấu cho trình gỡ lỗi

Khi bạn chạy mã trong trình gỡ lỗi, có thể đặt điểm dừng trong mã nơi trình gỡ lỗi sẽ dừng và cho phép bạn kiểm tra trạng thái chương trình trước khi tiếp tục

Khi một lần chạy thử nghiệm thường kích hoạt một điểm dừng, chẳng hạn như trong một vòng lặp, có thể có nhiều trường hợp trạng thái chương trình không thú vị. Để giải quyết vấn đề này, nhiều trình gỡ lỗi cũng cho phép điểm dừng có điều kiện, điểm dừng sẽ chỉ kích hoạt khi điều kiện là đúng. Ví dụ: bạn có thể đặt điểm ngắt trong vòng lặp

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
4 chỉ được kích hoạt nếu một biến là
def fizz_buzz[idx]:
    if idx % 15 == 0:
        return "fizz-buzz"
    elif idx % 3 == 0:
        return "fizz"
    elif idx % 5 == 0:
        return "buzz"
    else:
        return str[idx]
6 để xem lý do tại sao trường hợp này không được xử lý đúng cách

Tuy nhiên, nhiều trình sửa lỗi chỉ cho phép bạn đặt một vài điều kiện cơ bản trên các điểm dừng của mình, chẳng hạn như bằng nhau hoặc có thể là so sánh kích thước. Bạn có thể cần một điều kiện phức tạp hơn, chẳng hạn như kiểm tra xem một chuỗi có phải là một đối xứng trước khi ngắt không

Mặc dù trình gỡ lỗi có thể không có khả năng kiểm tra đối xứng, nhưng Python có thể làm như vậy với nỗ lực tối thiểu. Bạn có thể tận dụng lợi thế của chức năng đó bằng cách sử dụng câu lệnh không làm gì cả

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 và đặt điểm dừng trên dòng
>>> if 1 + 1 == 3:
..     pass
...
3

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
6

Bằng cách kiểm tra palindromes với

class Candy:
    pass
5, bây giờ bạn có một dòng chỉ thực hiện nếu điều kiện là đúng

Mặc dù dòng

>>> if 1 + 1 == 3:
..     pass
...
3 không làm gì cả, nhưng nó giúp bạn có thể đặt điểm ngắt ở đó. Bây giờ bạn có thể chạy mã này trong trình gỡ lỗi và chỉ ngắt trên các chuỗi là palindromes

Chức năng trống

Trong một số trường hợp, thậm chí có thể hữu ích nếu bạn đưa một chức năng trống vào phiên bản mã đã triển khai của bạn. Ví dụ: một chức năng trong thư viện có thể yêu cầu chức năng gọi lại được chuyển vào

Một trường hợp thậm chí còn phổ biến hơn là khi mã của bạn định nghĩa một lớp kế thừa từ một lớp dự kiến ​​một phương thức sẽ bị ghi đè. Tuy nhiên, trong trường hợp cụ thể của bạn, bạn không cần phải làm gì cả. Hoặc có lẽ lý do bạn ghi đè mã là để ngăn một phương thức có thể ghi đè làm bất cứ điều gì

Trong tất cả các trường hợp đó, bạn sẽ cần viết một hàm hoặc phương thức trống. Một lần nữa, vấn đề là không có dòng nào sau dòng

class Candy:
    pass
7 không phải là cú pháp Python hợp lệ

>>>

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
7

Điều này không thành công vì một hàm, giống như các khối khác, phải bao gồm ít nhất một câu lệnh. Để khắc phục sự cố này, bạn có thể sử dụng

>>> if 1 + 1 == 3:
..     pass
...
3

>>>

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
8

Bây giờ hàm có một câu lệnh, thậm chí một câu lệnh không làm gì, đó là cú pháp Python hợp lệ

Một ví dụ khác, hãy tưởng tượng bạn có một hàm yêu cầu một đối tượng giống như tệp ghi vào. Tuy nhiên, bạn muốn gọi hàm vì một lý do khác và muốn loại bỏ đầu ra. Bạn có thể sử dụng

>>> if 1 + 1 == 3:
..     pass
...
3 để viết một lớp loại bỏ tất cả dữ liệu

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
9

Các thể hiện của lớp này hỗ trợ phương thức

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
00 nhưng loại bỏ tất cả dữ liệu ngay lập tức

Trong cả hai ví dụ này, điều quan trọng là một phương thức hoặc chức năng tồn tại, nhưng nó không cần phải làm bất cứ điều gì. Bởi vì các khối Python phải có các câu lệnh, bạn có thể làm cho các hàm hoặc phương thức trống hợp lệ bằng cách sử dụng __________3

Loại bỏ các quảng cáo

lớp trống

Trong Python, tính kế thừa ngoại lệ rất quan trọng vì nó đánh dấu ngoại lệ nào bị bắt. Ví dụ: ngoại lệ tích hợp sẵn

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
02 là cấp độ gốc của
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
03. Một ngoại lệ
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
03 được đưa ra khi một khóa không tồn tại được tra cứu trong từ điển. Điều này có nghĩa là bạn có thể sử dụng
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
02 để bắt một
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
03

>>>

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
0

Ngoại lệ

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
03 bị bắt mặc dù câu lệnh
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
08 chỉ định
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
02. Điều này là do
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
03 là một lớp con của
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
02

Đôi khi bạn muốn đưa ra các ngoại lệ cụ thể trong mã của mình vì chúng có đường dẫn khôi phục cụ thể. Tuy nhiên, bạn muốn đảm bảo rằng những ngoại lệ đó kế thừa từ một ngoại lệ chung trong trường hợp ai đó bắt ngoại lệ chung. Các lớp ngoại lệ này không có hành vi hoặc dữ liệu. Chúng chỉ là điểm đánh dấu

Để thấy được tính hữu ích của hệ thống phân cấp ngoại lệ phong phú, bạn có thể xem xét việc kiểm tra quy tắc mật khẩu. Trước khi cố gắng thay đổi mật khẩu trên một trang web, bạn muốn kiểm tra cục bộ các quy tắc mà nó thực thi

  • Ít nhất tám ký tự
  • Ít nhất một số
  • Ít nhất một ký tự đặc biệt, chẳng hạn như dấu chấm hỏi [_______20_______12], dấu chấm than [
    >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    13] hoặc dấu chấm [
    >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    14]

Ghi chú. Ví dụ này hoàn toàn để minh họa ngữ nghĩa và kỹ thuật Python. Nghiên cứu đã chỉ ra rằng các quy tắc phức tạp của mật khẩu không làm tăng tính bảo mật

Để biết thêm thông tin, hãy xem Viện Tiêu chuẩn và Công nghệ Quốc gia [NIST] và nghiên cứu mà họ dựa trên

Mỗi lỗi đó nên có ngoại lệ riêng. Đoạn mã sau thực hiện các quy tắc đó

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
1

Hàm này sẽ đưa ra một ngoại lệ nếu mật khẩu không tuân theo các quy tắc đã chỉ định. Một ví dụ thực tế hơn sẽ ghi chú tất cả các quy tắc chưa được tuân theo, nhưng điều đó nằm ngoài phạm vi của hướng dẫn này

Bạn có thể sử dụng chức năng này trong trình bao bọc để in ngoại lệ theo cách hay

>>>

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
2

Trong trường hợp này,

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
15 chỉ bắt được
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
16 vì các ngoại lệ khác của
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
17 có thể là lỗi trong chính trình kiểm tra. Nó in ra tên và giá trị của ngoại lệ, hiển thị quy tắc không được tuân theo

Trong một số trường hợp, người dùng của bạn có thể không quan tâm chính xác vấn đề nào tồn tại trong đầu vào. Trong trường hợp đó, bạn sẽ chỉ muốn bắt

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
17

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
3

Trong mã này, tất cả thông tin nhập không hợp lệ đều được xử lý như nhau vì bạn không quan tâm thông tin đăng nhập có vấn đề gì

Do những trường hợp sử dụng khác nhau này,

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
19 cần cả bốn ngoại lệ

  1. >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    16
  2. >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    21
  3. >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    22
  4. >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    23

Mỗi ngoại lệ này mô tả một quy tắc khác bị vi phạm. Trong mã khớp một chuỗi theo các quy tắc phức tạp hơn, có thể có nhiều quy tắc khác trong số này, được sắp xếp theo một cấu trúc phức tạp

Mặc dù cần có bốn lớp khác nhau, nhưng không lớp nào có bất kỳ hành vi nào. Câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 cho phép bạn định nghĩa cả bốn lớp một cách nhanh chóng

Loại bỏ các quảng cáo

Phương pháp đánh dấu

Một số phương thức trong các lớp tồn tại không phải để được gọi mà để đánh dấu lớp là bằng cách nào đó được liên kết với phương thức này

Thư viện chuẩn Python có mô-đun

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
25. Tên của mô-đun là viết tắt của lớp cơ sở trừu tượng. Mô-đun này giúp xác định các lớp không được khởi tạo mà dùng làm cơ sở chung cho một số lớp khác

Nếu bạn đang viết mã để phân tích các kiểu sử dụng của máy chủ web, thì bạn có thể muốn phân biệt giữa các yêu cầu đến từ người dùng đã đăng nhập và những yêu cầu đến từ các kết nối không được xác thực. Bạn có thể lập mô hình này bằng cách có một lớp cha

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
26 có hai lớp con.
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
27 và
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
28

Không có gì nên khởi tạo trực tiếp lớp

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
26. Mỗi yêu cầu phải đến từ nguồn gốc
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
27 hoặc nguồn gốc
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
28. Đây là một triển khai tối giản

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
4

Trong khi một lớp

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
26 thực sẽ phức tạp hơn, ví dụ này cho thấy một số điều cơ bản.
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
33 sẽ không bao giờ được gọi vì tất cả các lớp con phải ghi đè lên nó

Bởi vì

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
26 có một
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
35, nó không thể được khởi tạo

>>>

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
5

Không thể khởi tạo các lớp có phương thức

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
35. Điều này có nghĩa là bất kỳ đối tượng nào có lớp cha
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
26 sẽ là một thể hiện của lớp ghi đè
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
38. Do đó, phần thân trong
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
33 không quan trọng, nhưng phương thức cần tồn tại để chỉ ra rằng tất cả các lớp con phải khởi tạo nó

Bởi vì nội dung phương thức không thể để trống, bạn phải đặt thứ gì đó vào

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
33. Một lần nữa, tuyên bố không làm gì cả
>>> if 1 + 1 == 3:
..     pass
...
3 là một lựa chọn tốt để làm rõ rằng bạn đã đưa vào dòng này chỉ vì lý do cú pháp

Một cách hiện đại hơn để chỉ ra các phương thức cần thiết là sử dụng

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
42, có sẵn trong thư viện chuẩn trong Python 3. 8 trở lên. Trong các phiên bản Python cũ hơn, nó có sẵn với các backport
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
43

Một

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
42 khác với một lớp cơ sở trừu tượng ở chỗ nó không được liên kết rõ ràng với một lớp cụ thể. Thay vào đó, nó dựa vào khớp loại để liên kết nó vào thời điểm đó với
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
45

Các phương thức trong một

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
42 không bao giờ được gọi. Chúng chỉ phục vụ để đánh dấu các loại phương pháp cần thiết

>>>

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
6

Trình bày cách sử dụng

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
42 như thế này trong
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
45 không liên quan đến câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3. Nhưng điều quan trọng là phần thân của phương thức chỉ có câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3

Có nhiều ví dụ hơn về các điểm đánh dấu như vậy được sử dụng bên ngoài ngôn ngữ Python và các thư viện tiêu chuẩn. Ví dụ: chúng được sử dụng trong gói

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
51 để biểu thị các phương thức giao diện và trong
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
52 để biểu thị đầu vào cho máy tự động trạng thái hữu hạn

Trong tất cả các trường hợp này, các lớp cần có các phương thức nhưng không bao giờ gọi chúng. Vì điều này, cơ thể không thành vấn đề. Nhưng vì phần thân không thể để trống nên bạn có thể sử dụng câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 để thêm phần thân

Các lựa chọn thay thế cho
>>> if 1 + 1 == 3:
..     pass
...
3

Câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 không phải là cách duy nhất để không làm gì trong mã của bạn. Nó thậm chí không phải là ngắn nhất, như bạn sẽ thấy sau. Nó thậm chí không phải lúc nào cũng là cách tiếp cận Pythonic tốt nhất hoặc tốt nhất

Bất kỳ biểu thức nào trong Python là một câu lệnh hợp lệ và mọi hằng số là một biểu thức hợp lệ. Vì vậy, tất cả các biểu thức sau đây không làm gì cả

  • def fizz_buzz[idx]:
        if idx % 15 == 0:
            return "fizz-buzz"
        elif idx % 3 == 0:
            return "fizz"
        elif idx % 5 == 0:
            return "buzz"
        else:
            return str[idx]
    
    6
  • >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    57
  • >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    58
  • >>> if 1 + 1 == 2:
    ..     print["math is ok"]
    ..     pass
    ..     print["but this is to be expected"]
    ...
    math is ok
    but this is to be expected
    
    59

Bạn có thể sử dụng bất kỳ biểu thức nào trong số này làm câu lệnh duy nhất trong một bộ và nó sẽ hoàn thành nhiệm vụ tương tự như

>>> if 1 + 1 == 3:
..     pass
...
3. Lý do chính để tránh sử dụng chúng dưới dạng câu nói không làm gì cả là vì chúng đơn điệu. Khi bạn sử dụng chúng, những người đọc mã của bạn sẽ không hiểu tại sao chúng lại ở đó

Nói chung, câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3, trong khi cần nhiều ký tự để viết hơn, chẳng hạn như,
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
58, là cách tốt nhất để thông báo với những người bảo trì trong tương lai rằng khối mã đã được cố tình để trống

Loại bỏ các quảng cáo

tài liệu

Có một ngoại lệ quan trọng đối với thành ngữ sử dụng

>>> if 1 + 1 == 3:
..     pass
...
3 như một tuyên bố không làm gì cả. Trong các lớp, hàm và phương thức, việc sử dụng biểu thức chuỗi hằng số sẽ khiến biểu thức được sử dụng làm đối tượng

Thuộc tính

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
64 được sử dụng bởi
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
66 trong trình thông dịch tương tác và bởi nhiều, nhiều IDE và các nhà phát triển khác đọc mã. Một số kiểu mã nhấn mạnh vào việc có nó trong mọi lớp, chức năng hoặc phương thức

Ngay cả khi một chuỗi tài liệu không bắt buộc, nó thường là một sự thay thế tốt cho câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 trong một khối trống. Bạn có thể sửa đổi một số ví dụ từ trước đó trong hướng dẫn này để sử dụng chuỗi tài liệu thay vì
>>> if 1 + 1 == 3:
..     pass
...
3

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
7

Trong tất cả các trường hợp này, chuỗi tài liệu làm cho mã rõ ràng hơn. Chuỗi tài liệu cũng sẽ hiển thị khi bạn sử dụng mã này trong trình thông dịch tương tác và trong IDE, làm cho nó thậm chí còn có giá trị hơn

Ghi chú. Các tài liệu trên là ngắn gọn vì có một số lớp và chức năng. Một chuỗi tài liệu dành cho sản xuất thường sẽ kỹ lưỡng hơn

Một lợi thế kỹ thuật của chuỗi tài liệu, đặc biệt đối với những chức năng hoặc phương thức không bao giờ thực thi, là chúng không bị đánh dấu là "chưa được khám phá" bởi trình kiểm tra phạm vi kiểm tra

dấu chấm lửng

Trong , cách được khuyến nghị để điền vào một khối là sử dụng dấu chấm lửng [

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
69] như một biểu thức hằng số. Đây là một hằng số tối nghĩa có giá trị là
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
70

>>>

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
8

Đối tượng đơn lẻ

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
70, của lớp
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
72 dựng sẵn, là một đối tượng thực được tạo bởi biểu thức
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
69

Việc sử dụng ban đầu cho

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
70 là tạo các lát cắt đa chiều. Tuy nhiên, giờ đây nó cũng là cú pháp được đề xuất để điền vào một bộ trong một tệp sơ khai

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
9

Hàm này không chỉ không làm gì mà còn nằm trong một tệp mà trình thông dịch Python không bao giờ đánh giá

Tăng một lỗi

Trong trường hợp các hàm hoặc phương thức trống vì chúng không bao giờ thực thi, đôi khi phần thân tốt nhất cho chúng là

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
75. Mặc dù về mặt kỹ thuật, điều này thực sự làm được điều gì đó, nhưng nó vẫn là một sự thay thế hợp lệ cho câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3

Sử dụng vĩnh viễn của
>>> if 1 + 1 == 3:
..     pass
...
3

Đôi khi việc sử dụng câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 không phải là tạm thời—nó sẽ vẫn ở phiên bản cuối cùng của mã đang chạy. Trong những trường hợp đó, không có thành ngữ thay thế nào tốt hơn hoặc phổ biến hơn để điền vào một khối trống khác hơn là sử dụng
>>> if 1 + 1 == 3:
..     pass
...
3

Sử dụng
>>> if 1 + 1 == 3:
..     pass
...
3 trong Bắt ngoại lệ

Khi sử dụng

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
81 để bắt một ngoại lệ, đôi khi bạn không cần phải làm gì với ngoại lệ đó. Trong tình huống đó, bạn có thể sử dụng câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3 để tắt lỗi

Nếu bạn muốn chắc chắn rằng một tệp không tồn tại, thì bạn có thể sử dụng

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
83. Hàm này sẽ báo lỗi nếu không có tệp. Tuy nhiên, tệp không có chính xác như những gì bạn muốn trong trường hợp này, vì vậy lỗi là không cần thiết

Đây là chức năng xóa tệp và không bị lỗi nếu tệp không tồn tại

>>> if 1 + 1 == 3:
..     pass
...
0

Bởi vì không cần phải làm gì nếu một

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
84 được nâng lên, bạn có thể sử dụng
>>> if 1 + 1 == 3:
..     pass
...
3 để có một khối không có câu lệnh nào khác

Ghi chú. Điều quan trọng là phải thận trọng khi bỏ qua các ngoại lệ. Một ngoại lệ thường có nghĩa là đã xảy ra điều gì đó không mong muốn và cần phải khôi phục. Trước khi bỏ qua các ngoại lệ, hãy suy nghĩ cẩn thận về những gì có thể gây ra chúng

Lưu ý rằng câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 thường sẽ được thay thế bằng câu lệnh ghi nhật ký. Tuy nhiên, không bắt buộc phải làm điều này nếu lỗi đã được dự kiến ​​và hiểu rõ

Trong trường hợp này, bạn cũng có thể sử dụng trình quản lý ngữ cảnh

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
87 để khắc phục lỗi. Tuy nhiên, nếu bạn cần xử lý một số lỗi trong khi bỏ qua những lỗi khác, thì đơn giản hơn là có một lớp
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
08 trống không có gì ngoại trừ câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3

Ví dụ: nếu bạn muốn

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
90 xử lý các thư mục cũng như tệp, thì bạn có thể sử dụng phương pháp này

>>> if 1 + 1 == 3:
..     pass
...
1

Ở đây, bạn bỏ qua

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
84 trong khi thử lại
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
92

Trong ví dụ này, thứ tự của các câu lệnh

>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
08 không quan trọng vì
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
84 và
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
92 là anh em ruột và cả hai đều thừa kế từ
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
96. Nếu có một trường hợp xử lý
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
96 chung, có lẽ bằng cách đăng nhập và bỏ qua nó, thì thứ tự sẽ quan trọng. Trong trường hợp đó,
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
84 và câu lệnh
>>> if 1 + 1 == 3:
..     pass
...
3 của nó sẽ phải đến trước
>>> if 1 + 1 == 2:
..     print["math is ok"]
..     pass
..     print["but this is to be expected"]
...
math is ok
but this is to be expected
96

Loại bỏ các quảng cáo

Sử dụng
>>> if 1 + 1 == 3:
..     pass
...
3 trong Chuỗi
def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 …
>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
03

Khi bạn sử dụng chuỗi dài

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 …
>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
03, đôi khi bạn không cần phải làm bất cứ điều gì trong một trường hợp. Tuy nhiên, bạn không thể bỏ qua
>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
03 đó vì việc thực hiện sẽ tiếp tục cho đến điều kiện khác

Hãy tưởng tượng rằng một nhà tuyển dụng cảm thấy mệt mỏi với việc sử dụng thử thách fizz-buzz như một câu hỏi phỏng vấn và quyết định hỏi nó một cách khó hiểu. Lần này luật chơi hơi khác

  • Nếu số đó chia hết cho 20, thì in ra
    >>> if 1 + 1 == 3:
    ...
      File "", line 2
    
        ^
    IndentationError: expected an indented block
    
    07
  • Ngược lại, nếu số đó chia hết cho 15 thì không in được gì
  • Ngược lại, nếu số đó chia hết cho 5, thì in ra
    >>> if 1 + 1 == 3:
    ...
      File "", line 2
    
        ^
    IndentationError: expected an indented block
    
    08
  • Ngược lại, nếu số đó chia hết cho 3, thì in ra
    >>> if 1 + 1 == 3:
    ...
      File "", line 2
    
        ^
    IndentationError: expected an indented block
    
    09
  • Nếu không, in số

Người phỏng vấn tin rằng bước ngoặt mới này sẽ làm cho câu trả lời thú vị hơn

Như với tất cả các câu hỏi phỏng vấn lập trình, có nhiều cách để giải quyết thách thức này. Nhưng có một cách là sử dụng vòng lặp

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
4 với chuỗi bắt chước mô tả ở trên

>>> if 1 + 1 == 3:
..     pass
...
2

Chuỗi

def get_and_save_middle[data, fname]:
    middle = data[len[data]//3:2*len[data]//3]
    save_to_file[middle, fname]
    return middle
3 …
>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
03 phản ánh logic chuyển sang tùy chọn tiếp theo chỉ khi tùy chọn trước đó không thực hiện

Trong ví dụ này, nếu bạn loại bỏ hoàn toàn mệnh đề

>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
13, thì bạn sẽ thay đổi hành vi. Thay vì không in gì cho các số chia hết cho 15, bạn sẽ in
>>> if 1 + 1 == 3:
...
  File "", line 2

    ^
IndentationError: expected an indented block
08. Điều khoản là cần thiết ngay cả khi không có gì để làm trong trường hợp đó

Trường hợp sử dụng này cho câu lệnh

>>> if 1 + 1 == 3:
..     pass
...
3 cho phép bạn tránh phải cấu trúc lại logic và giữ cho mã được sắp xếp theo cách phù hợp với mô tả hành vi

Phần kết luận

Bây giờ bạn đã hiểu câu lệnh Python

>>> if 1 + 1 == 3:
..     pass
...
3 làm gì. Bạn đã sẵn sàng sử dụng nó để cải thiện tốc độ phát triển và gỡ lỗi cũng như triển khai nó một cách khéo léo trong mã sản xuất của bạn

Trong hướng dẫn này, bạn đã học

  • Câu lệnh
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 của Python là gì và tại sao nó hữu ích
  • Cách sử dụng câu lệnh Python
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 trong mã sản xuất
  • Cách sử dụng câu lệnh Python
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 như một công cụ hỗ trợ trong khi phát triển mã
  • Các lựa chọn thay thế cho
    >>> if 1 + 1 == 3:
    ..     pass
    ...
    
    3 là gì và khi nào bạn nên sử dụng chúng

Bây giờ bạn sẽ có thể viết mã tốt hơn và hiệu quả hơn bằng cách biết cách yêu cầu Python không làm gì cả

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Moshe Zadka

Moshe đã sử dụng Python từ năm 1998. Anh ấy đã đóng góp cho CPython và là thành viên sáng lập của dự án Twisted. Anh ấy đã dạy Python ở nhiều địa điểm khác nhau từ năm 2002

» Thông tin thêm về Moshe

Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Aldren

Geir Arne

Jim

Joanna

Gia-cốp

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Làm cách nào tôi có thể thực thi khác trong Python?

Câu lệnh if-else trong Python . Trong câu lệnh if-else, chúng ta có hai nhánh trường hợp câu lệnh đúng hoặc sai. Khối if được thực thi trong trường hợp biểu thức là đúng. Khối khác được thực thi trong trường hợp biểu thức sai. adding an additional else block. In the if-else statement, we have two branches incase the statement is true or false. The if block is executed in case the expression is true. The else block is executed in case the expression is false.

Có phải other luôn được thực thi trong Python không?

mệnh đề khác được thực thi nếu không có ngoại lệ nào được đưa ra trong khối thử . mệnh đề khác trong vòng lặp for được thực thi khi vòng lặp for kết thúc do hết khả năng lặp và không bị kết thúc bởi câu lệnh break. Trong vòng lặp while, mệnh đề khác được thực hiện sau khi điều kiện là Sai.

Tại sao Elif không hoạt động trong Python?

Vấn đề là dòng trống bạn đang nhập trước ký tự else hoặc elif . Chú ý đến lời nhắc bạn được đưa ra. Nếu là >>> , thì Python đang đợi bắt đầu một câu lệnh mới. Nếu nó là. , thì nó mong bạn tiếp tục câu lệnh trước đó.

Câu lệnh Else hoạt động như thế nào trong Python?

Câu lệnh if-else được sử dụng để thực hiện cả phần đúng và phần sai của một điều kiện nhất định. Nếu điều kiện là đúng, mã khối if sẽ được thực thi và nếu điều kiện là sai, mã khối other sẽ được thực thi .

Chủ Đề