Trong Python, có hữu ích mã này xử lý ngoại lệ:C#: tương đương của các thử python/catch/khác chặn
try:
# Code that could raise an exception
except Exception:
# Exception handling
else:
# Code to execute if the try block DID NOT fail
Tôi nghĩ rằng nó rất hữu ích để có thể tách các mã mà thể tăng và ngoại trừ mã bình thường của bạn. Trong Python, điều này là có thể như được hiển thị ở trên, tuy nhiên tôi không thể tìm thấy bất cứ điều gì giống như nó trong C#.
Giả sử đối tượng địa lý hoặc đối tượng địa lý không tồn tại, thực tiễn tiêu chuẩn có đặt mã bình thường trong khối try
hoặc sau khối catch
không?
Lý do tôi hỏi là vì tôi có đoạn mã sau:
if (!IsReadOnly)
{
T newobj;
try
{
newobj = DataPortal.Update<T>(this);
List<string> keys = new List<string>(BasicProperties.Keys);
foreach (string key in keys)
{
BasicProperties[key] = newobj.BasicProperties[key];
}
}
catch (DataPortalException)
{
// TODO: Implement DataPortal.Update<T>() recovery mechanism
}
}
nào yêu cầu mã thông thường là trong khối try bởi vì nếu nếu một ngoại lệ được nâng lên và sau đó xử lý, newobj
sẽ được bỏ gán, nhưng nó cảm thấy khá không tự nhiên khi có nhiều mã trong khối thử không liên quan đến DataPortalException
. Phải làm gì?
Cảm ơn
Tôi luôn ghét sử dụng các khối try bắt vì điều này. Không có cách nào để tách mã đã ngắt và không phá mã. –
Bỏ phiếu để đóng thành bản sao chính xác: http://stackoverflow.com/questions/1177438/c-try-catch-else – ChristopheD
Điều này có thể trùng lặp, nhưng câu hỏi đó chưa bao giờ được trả lời đầy đủ. Sau khi đọc qua các câu trả lời, tôi thích ý tưởng của Daniel Newby nhất. –