Apex Best Practice: Should You Use Multiple Try-Catch Blocks in One Method?

 

In Salesforce development, handling exceptions properly is essential to writing robust and maintainable Apex code. A common question that developers often ask is:

"Is it okay to use multiple try-catch blocks in a single method?"

The answer is: It depends.

Let’s break it down with best practices, examples, and when it's actually beneficial.

✅ When to Use Multiple Try-Catch Blocks

Using multiple try-catch blocks makes sense when:

  • Different operations in your method are independent.

  • You want to gracefully handle errors and continue execution even if one operation fails.

  • You need to log specific messages or take different actions for different types of exceptions.

Example: Independent Operations

In this example, even if the account insert fails, the contact insert is still attempted. This makes your logic more resilient and less prone to total failure.

public void processAccountAndContact() {
    try {
        insert account;
    } catch (DmlException e) {
        System.debug('Failed to insert account: ' + e.getMessage());
    }

    try {
        insert contact;
    } catch (DmlException e) {
        System.debug('Failed to insert contact: ' + e.getMessage());
    }
}

❌ When to Avoid Multiple Try-Catch Blocks

Sometimes, adding several try-catch blocks can lead to:

  • Code clutter and reduced readability.

  • Misuse by catching exceptions that should actually bubble up.

  • Masking issues in tightly-coupled or dependent logic.

If your operations are dependent on each other, or you’re doing something small and trivial in each block, it’s usually better to consolidate.


🟡 Alternative: One Try-Catch with Internal Conditions

If your operations belong to a single logical unit and need to succeed or fail together, use one try-catch block and handle different paths with if conditions.

public void process() { try { if (shouldInsertAccount) { insert account; } if (shouldInsertContact) { insert contact; } } catch (Exception e) { System.debug('Something went wrong: ' + e.getMessage()); } }

This improves code readability and avoids unnecessary exception nesting.

✅ Best Practice Summary


ScenarioRecommendation
Independent operations that can fail separately✔️ Use multiple try-catch blocks
Dependent logic or a single business transaction✔️ Use one try-catch block
Inside loops or triggers✔️ Handle per-record exceptions
Want reusable logic✔️ Move logic into helper methods, each with their own exception handling

💡 Pro Tip

In trigger handlers or batch jobs, always use bulk-safe patterns by handling exceptions per record, so that one failure doesn’t affect the rest.

Final Thoughts

Using multiple try-catch blocks isn’t inherently bad—it’s all about context. Use them wisely to make your Apex code more resilient, readable, and reliable.

Need a reusable pattern for exception-safe bulk processing or async jobs? Feel free to ask in the comments or connect with us!



Comments

Popular posts from this blog

Do you want to be certified as a Salesforce Admin?

Displaying pop-up summaries on hover in visualforce

Unit Testing in Salesforce