Tăng trong Python có trả lại không?

Tăng một ngoại lệ

Là nhà phát triển Python, bạn có thể chọn ném ngoại lệ nếu có điều kiện xảy ra

Để ném [hoặc tăng] một ngoại lệ, hãy sử dụng từ khóa raise

Thí dụ

Báo lỗi và dừng chương trình nếu x nhỏ hơn 0

x = -1

nếu x < 0.
  raise Exception["Xin lỗi, không có số nào dưới 0"]

Tự mình thử »

Từ khóa raise được sử dụng để đưa ra một ngoại lệ

Bạn có thể xác định loại lỗi nào sẽ gây ra và văn bản sẽ in cho người dùng

Thí dụ

Tăng TypeError nếu x không phải là số nguyên

x = "xin chào"

nếu không gõ[x] là int.
  tăng TypeError["Chỉ cho phép số nguyên"]

Tự mình thử »


Ghi chú. Đối với những người không phải là thành viên, bài viết này có sẵn tại https. //dineshkumarkb. com/tech/caveats-of-using-return-with-try-except-in-python/

Mã người dùng có thể tăng ngoại lệ tích hợp. Python định nghĩa try/ngoại trừ để xử lý các ngoại lệ và tiếp tục thực hiện chương trình tiếp theo mà không bị gián đoạn

Hãy nhanh chóng lấy một ví dụ về mệnh đề try/ngoại trừ cơ bản

câu lệnh thử/ngoại trừ

Giả sử tệp không có sẵn, việc thực thi đoạn mã dưới đây sẽ cho đầu ra như hình bên dưới

try:
    f = open["testfile.txt"]
    ...

except FileNotFoundError as e:
    print[f" Error while reading file {e} "]

Output:
Error while reading file [Errno 2] No such file or directory: 'testfile.txt'

Trong các trường hợp sử dụng thực tế, chẳng hạn như kết nối với db hoặc mở một đối tượng tệp, chúng tôi có thể cần thực hiện các thao tác chia nhỏ như đóng db/đóng tệp bất kể khối được thực thi. Vì vậy, cuối cùng là một khối như vậy có thể được dành riêng cho các hoạt động này vì nó luôn được thực thi. Hãy xem xét một ví dụ

câu lệnh thử/ngoại trừ/cuối cùng

try:
    f = open["testfile.txt"]
except FileNotFoundError as e:
    print[f" Error while reading file {e} "]
finally:
    print[" Closing the file "]
    f.close[]

Vì vậy, những gì có thể đi sai ở đây?

Chà, người ta có thể dễ dàng đặt chân vào miệng họ khi họ sử dụng các câu lệnh trả về với try/ngoại trừ/cuối cùng trong Python. Hãy cẩn thận thực hiện từng bước một để hiểu cách sử dụng các câu lệnh trả về trong quá trình xử lý ngoại lệ

1. Cách sử dụng return với try/ngoại trừ

def test_func[]:
    try:
        x = 10
        return x
    except Exception as e:
        x = 20
        return x
    finally:
        x = 30
        return x

print[test_func[]]

Output:
30

Nếu bạn nghĩ đầu ra của đoạn mã trên là 10, tôi e rằng bạn đã nhầm. Việc đưa ra giả định đó là điều khá bình thường bởi vì chúng ta có xu hướng nghĩ rằng thời điểm có một câu lệnh trả về trong một hàm, thì nó sẽ trả về [thoát] khỏi hàm. Chà, điều đó có thể không đúng trong trường hợp này

Từ các tài liệu,

  • Nếu có mệnh đề cuối cùng, mệnh đề cuối cùng sẽ thực thi như tác vụ cuối cùng trước khi câu lệnh thử hoàn thành. Mệnh đề cuối cùng chạy cho dù câu lệnh thử có tạo ngoại lệ hay không

  • Nếu câu lệnh try đến một câu lệnh break, continue hoặc return, mệnh đề cuối cùng sẽ thực thi ngay trước khi thực thi câu lệnh break, continue hoặc return

  • Nếu một mệnh đề cuối cùng bao gồm một câu lệnh trả về, thì giá trị được trả về sẽ là giá trị từ câu lệnh trả về của mệnh đề cuối cùng, không phải giá trị từ câu lệnh trả về của mệnh đề try/ngoại trừ

Vì vậy, như bạn đã đoán đúng, đầu ra của đoạn mã trên sẽ là 30

Bây giờ, điều gì sẽ xảy ra nếu một ngoại lệ được đưa ra trong mã nói trên

2. Cách sử dụng lợi nhuận có ngoại lệ

def test_func[]:
    try:
        x = 10
        raise Exception
    except Exception as e:
        print[f" Raising exception "]
        x = 20
        return x
    finally:
        x = 30
        return x

print[test_func[]]


Output:
Raising exception
30

Vì vậy, một lần nữa giá trị đầu ra của x sẽ là 30. Chúng ta nên nhớ thực tế là một câu lệnh cuối cùng LUÔN LUÔN được thực thi

Để có ý tưởng rõ ràng hơn về luồng thực thi, hãy thêm các câu lệnh in vào mỗi khối

def test_func[]:
    try:
        x = 10
        print[f" Inside try block "]
        return x
    except Exception as e:
        x = 20
        print[f" Inside except block "]
        return x
    finally:
        x = 30
        print[f" Inside finally block "]
        return x

print[test_func[]]


Output:
Inside try block
Inside finally block
30

Điều này sẽ đưa ra một ý tưởng về luồng thực thi. Bây giờ chúng ta đã hiểu rõ về cách hoạt động của try/ngoại trừ/cuối cùng với các câu lệnh trả về, hãy thử đưa vào một mệnh đề khác

Một mệnh đề khác có thể được thêm vào cùng với try/ngoại trừ và mệnh đề khác sẽ được thực thi nếu khối thử không đưa ra ngoại lệ

3. Cách sử dụng return với try/else/cuối cùng

def test_func[]:
    try:
        x = 10
        print[f" Inside try block "]
        return x
    except Exception as e:
        x = 20
        print[f" Inside except block "]
        return x
    else:
        print[f" Inside else block "]
        x = 40
        return x
    finally:
        x = 30
        print[f" Inside finally block "]
        return x



print[test_func[]]

Output:

Inside try block
Inside finally block
30

Vậy tại sao mệnh đề other không được thực thi ở đây mặc dù khối try không đưa ra bất kỳ ngoại lệ nào. Lưu ý câu lệnh return trong khối thử. Khối khác không bao giờ được thực thi vì hàm đã trả về ngay cả trước khi thực thi đến mệnh đề khác

Bây giờ hãy xóa câu lệnh return trong khối thử và thực hiện lại đoạn mã trên

def test_func[]:
    try:
        x = 10
        print[f" Inside try block "]
    except Exception as e:
        x = 20
        print[f" Inside except block "]
        return x
    else:
        print[f" Inside else block "]
        x = 40
        return x
    finally:
        x = 30
        print[f" Inside finally block "]
        return x



print[test_func[]]

Output:
Inside try block
Inside else block
Inside finally block
30

Bản tóm tắt

  • Hãy hết sức thận trọng khi thêm return vào các mệnh đề try/ngoại trừ/cuối cùng

  • Mệnh đề cuối cùng chạy cho dù câu lệnh thử có tạo ngoại lệ hay không

  • Nếu một mệnh đề cuối cùng bao gồm một câu lệnh trả về, thì giá trị được trả về sẽ là giá trị từ câu lệnh trả về của mệnh đề cuối cùng

  • Một mệnh đề khác sẽ được thực thi nếu khối thử không đưa ra một ngoại lệ

Người giới thiệu

  • https. // tài liệu. con trăn. org/3/hướng dẫn/lỗi. html

  • https. // stackoverflow. com/questions/11164144/weird-try-except-else-Lastly-behavior-with-return-statements

    Nâng cao có dừng chức năng Python không?

    Từ khóa nâng cao Python được sử dụng để tăng ngoại lệ hoặc lỗi. Từ khóa nâng cao gây ra lỗi và dừng luồng điều khiển của chương trình . Nó được sử dụng để hiển thị ngoại lệ hiện tại trong một trình xử lý ngoại lệ để nó có thể được xử lý thêm trong ngăn xếp cuộc gọi.

    Điều gì làm tăng ngoại lệ trở lại?

    Đưa ra ngoại lệ chấm dứt luồng chương trình của bạn, cho phép ngoại lệ nổi lên trong ngăn xếp cuộc gọi . Trong ví dụ trên, điều này sẽ cho phép bạn xử lý rõ ràng TypeError sau này. Nếu TypeError không được xử lý, quá trình thực thi mã sẽ dừng lại và bạn sẽ nhận được thông báo ngoại lệ chưa được xử lý.

    Bạn có thể quay lại và tăng ngoại lệ Python không?

    Là nhà phát triển Python, bạn có thể chọn ném ngoại lệ nếu có điều kiện xảy ra. Để ném [hoặc tăng] một ngoại lệ, hãy sử dụng từ khóa tăng .

    Sự khác biệt giữa trả lại và nâng cao là gì?

    return có thể gửi bất kỳ loại giá trị nào, nhưng raise chỉ có thể gửi các đối tượng lỗi . Cả hai đều tạo khớp nối trên các khung ngăn xếp cuộc gọi. trả về các cặp vợ chồng hai khung ngăn xếp cuộc gọi liền kề. người gọi phụ thuộc vào giá trị trả về.

Chủ Đề