2010-08-13 35 views

Trả lời

20

Tôi không hoàn toàn tin rằng tôi thích nó, nhưng điều này sẽ tương đương với Python của người khác. Nó giúp loại bỏ vấn đề được xác định bằng cách đặt mã thành công vào cuối khối thử.

bool success = true; 
try { 
    something(); 
} catch (Exception e) { 
    success = false; 
    // other exception handling 
} 
if (success) { 
    // equivalent of Python else goes here 
} 
+0

Trong nhiều trường hợp (ví dụ: các phương thức nhỏ), bạn có thể ném lại hoặc quay trở lại từ khối 'catch', vì vậy bạn chỉ có thể đặt logic' else' sau khi hoàn thành 'try-catch'. –

+3

-1 Để nhân đôi ngữ nghĩa của cấu trúc 'try-catch-else' của Python, bạn nên * không * sử dụng khối cuối cùng, vì điều này sẽ được thực hiện ngay cả khi có' return' hoặc uncaught exception trong 'try' khối. Chỉ cần đặt khối 'if (success)' sau 'try-catch'. – augurar

+2

Cảm ơn @augurar - Tôi đã chơi xung quanh và đọc lại các tài liệu khác và bạn thực sự là chính xác. –

2

Mặc dù không có cách tích hợp để thực hiện điều đó. Bạn có thể làm một cái gì đó tương tự để đạt được kết quả tương tự. Các ý kiến ​​giải thích tại sao đây không phải là điều tương tự.

Nếu việc thực hiện các đường chuyền somethingThatCouldError(), YAY!! sẽ được in. Nếu có lỗi, SAD sẽ được in.

try { 
    somethingThatCouldError(); 
    System.out.println("YAY!!"); 
    // More general, code that needs to be executed in the case of success 
} catch (Exception e) { 
    System.out.println("SAD"); 
    // code for the failure case 
} 

Cách này ít rõ ràng hơn Python. Nhưng nó đạt được hiệu quả tương tự.

+3

Đóng, nhưng điều gì sẽ xảy ra nếu mã bên dưới "YAY" ném ngoại lệ? Nó sẽ in "YAY" và "SAD". –

+1

@Adam, đúng vậy. Nhưng, bạn chỉ có thể đặt 'Yay' vào cuối' try'. – jjnguy

+1

Điểm của tôi là trình xử lý ngoại lệ có thể được thực thi ngay cả khi 'somethingThatCouldError()' không ném một ngoại lệ. Tôi không nghĩ đó chính xác là những gì Greg muốn. –

0

Điều này thì sao?

try { 
    something(); 
} catch (Exception e) { 
    // exception handling 
    return; 
} 
// equivalent of Python else goes here 

Chắc chắn, có một số trường hợp bạn muốn đặt mã hơn sau try/catch/khác và giải pháp này không phù hợp ở đó, nhưng nó hoạt động nếu đó là khối try/catch chỉ trong phương pháp của bạn .

Các vấn đề liên quan