What will be the output of the following Python code?

4 phương ánCó giải thích
Đề bài
def foo():
    try:
        return 1
    finally:
        return 2
k = foo()
print(k)

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "2". Trong Python, khối finally luôn chạy trước khi hàm thực sự rời đi, kể cả khi khối try đã gặp return. Lần theo: foo() vào try, gặp return 1 nên giá trị 1 được chuẩn bị làm kết quả, nhưng trước khi trả về, trình thông dịch chạy finally; ở đó return 2 thay thế giá trị đang chờ, nên foo() trả 2, k nhận 2 và print(k) in ra 2. "1" sai vì bỏ qua việc return trong finally ghi đè return trong try. "3" sai vì không có phép cộng nào, hai giá trị không gộp lại với nhau. "error, there is more than one return statement in a single try-finally block" sai vì Python cho phép nhiều câu return trong một hàm, đặt trong cả try lẫn finally; đây là cú pháp hợp lệ, chỉ là cách viết dễ gây nhầm vì nó nuốt mất giá trị trả về của try, và cả ngoại lệ nếu try ném ra.

Cùng phần 4

Xuất hiện trong 1 bộ đề