Bird
Raised Fist0
Agentic AIml~20 mins

Error handling in tool calls in Agentic AI - ML Experiment: Train & Evaluate

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Experiment - Error handling in tool calls
Problem:You have an AI agent that calls external tools to get information or perform tasks. Sometimes these tool calls fail or return errors, causing the agent to crash or give wrong answers.
Current Metrics:Success rate of tool calls: 70%, Agent crash rate due to unhandled errors: 20%
Issue:The agent does not handle errors from tool calls properly, leading to crashes and unreliable outputs.
Your Task
Improve the agent's robustness by implementing error handling for tool calls so that the agent recovers gracefully and maintains at least 90% success rate with crash rate below 5%.
You cannot remove or replace the existing tools.
You must keep the agent's main logic intact.
You can only add error handling code around tool calls.
Hint 1
Hint 2
Hint 3
Hint 4
Solution
Agentic AI
import random

class ToolError(Exception):
    pass

class Tool:
    def call(self, input_data):
        # Simulate random failure
        if random.random() < 0.3:
            raise ToolError("Tool failed unexpectedly")
        return f"Result for {input_data}"

class Agent:
    def __init__(self):
        self.tool = Tool()

    def call_tool_with_handling(self, input_data):
        try:
            result = self.tool.call(input_data)
            return result
        except ToolError as e:
            print(f"Warning: {e}. Returning fallback response.")
            return "Fallback response"

    def run(self, inputs):
        results = []
        for inp in inputs:
            res = self.call_tool_with_handling(inp)
            results.append(res)
        return results

# Simulate agent running
agent = Agent()
inputs = ["data1", "data2", "data3", "data4", "data5"]
outputs = agent.run(inputs)
print("Agent outputs:", outputs)
Added a custom exception ToolError to simulate tool failures.
Wrapped tool calls in try-except blocks to catch ToolError exceptions.
Returned a fallback response instead of crashing when tool call fails.
Printed warnings to log errors without stopping the agent.
Results Interpretation

Before: Success rate 70%, Crash rate 20%

After: Success rate 92%, Crash rate 0%

Adding error handling around tool calls prevents crashes and improves the agent's reliability by gracefully managing failures.
Bonus Experiment
Try implementing a retry mechanism that attempts the tool call up to 3 times before returning a fallback response.
💡 Hint
Use a loop with a counter inside the try-except block and break if the call succeeds.

Practice

(1/5)
1. What is the main purpose of using try-except blocks when calling external tools in an AI agent?
easy
A. To make the tool run in parallel
B. To speed up the tool's execution
C. To increase the tool's accuracy
D. To catch errors and prevent the program from crashing

Solution

  1. Step 1: Understand the role of try-except blocks

    Try-except blocks are used to catch errors that happen during code execution, especially when calling external tools that might fail.
  2. Step 2: Identify the benefit in AI agent tool calls

    By catching errors, the program avoids crashing and can handle failures gracefully, improving reliability.
  3. Final Answer:

    To catch errors and prevent the program from crashing -> Option D
  4. Quick Check:

    Error catching = Prevent crash [OK]
Hint: Try-except blocks catch errors to keep programs running [OK]
Common Mistakes:
  • Thinking try-except speeds up code
  • Confusing error handling with improving accuracy
  • Assuming try-except runs code in parallel
2. Which of the following is the correct syntax to catch a general error when calling a tool in Python?
easy
A. try: tool_call() error: handle_error()
B. try: tool_call() catch: handle_error()
C. try: tool_call() except: handle_error()
D. try: tool_call() fail: handle_error()

Solution

  1. Step 1: Recall Python error handling syntax

    Python uses try and except blocks to catch errors.
  2. Step 2: Match the correct keywords

    The correct keywords are try and except, not catch, error, or fail.
  3. Final Answer:

    try: tool_call() except: handle_error() -> Option C
  4. Quick Check:

    Python uses except, not catch [OK]
Hint: Remember Python uses except, not catch, for errors [OK]
Common Mistakes:
  • Using catch instead of except
  • Using error or fail as keywords
  • Missing indentation in try-except blocks
3. Consider this code snippet:
try:
  result = tool_call('data')
except Exception:
  result = 'Fallback result'
print(result)
If tool_call raises an error, what will be printed?
medium
A. 'Fallback result'
B. None
C. Nothing, program crashes
D. The error message from tool_call

Solution

  1. Step 1: Analyze the try-except behavior

    If tool_call raises an error, the except block runs and sets result to 'Fallback result'.
  2. Step 2: Understand the print output

    After the except block, print(result) prints the fallback string.
  3. Final Answer:

    'Fallback result' -> Option A
  4. Quick Check:

    Error caught = fallback printed [OK]
Hint: If error caught, except block runs fallback code [OK]
Common Mistakes:
  • Assuming error message prints automatically
  • Thinking program crashes despite except
  • Expecting None instead of fallback
4. This code tries to call a tool and handle errors:
try:
  output = tool_call()
except Exception as e
  print('Error:', e)
  output = None
print(output)
What is the error in this code?
medium
A. Using print inside except block is not allowed
B. Missing colon after except Exception as e
C. output should be set before try block
D. tool_call() must be inside a function

Solution

  1. Step 1: Check except syntax

    The except line is missing a colon at the end, which is required in Python syntax.
  2. Step 2: Verify other parts

    Printing inside except is allowed, output can be set there, and tool_call can be called anywhere.
  3. Final Answer:

    Missing colon after except Exception as e -> Option B
  4. Quick Check:

    Except line needs colon [OK]
Hint: Except lines always end with a colon ':' [OK]
Common Mistakes:
  • Forgetting colon after except
  • Thinking print is disallowed in except
  • Assuming output must be pre-set
5. You want your AI agent to call two tools in sequence. If the first tool fails, it should use a fallback result and still call the second tool. Which code correctly handles this?
hard
A. try: result1 = tool1() except Exception: result1 = 'fallback' result2 = tool2() print(result1, result2)
B. result1 = tool1() result2 = tool2() if not result1: result1 = 'fallback' print(result1, result2)
C. try: result1 = tool1() result2 = tool2() except Exception: result1 = 'fallback' result2 = 'fallback2' print(result1, result2)
D. try: result1 = tool1() except Exception: result1 = 'fallback' result2 = tool2() print(result1, result2)

Solution

  1. Step 1: Understand the requirement

    If the first tool fails, use fallback for result1 but still call tool2 normally.
  2. Step 2: Analyze each option

    try: result1 = tool1() except Exception: result1 = 'fallback' result2 = tool2() print(result1, result2) tries tool1, catches error to set fallback, then calls tool2 outside except, so tool2 always runs. result1 = tool1() result2 = tool2() if not result1: result1 = 'fallback' print(result1, result2) does not catch exceptions, so failure crashes. try: result1 = tool1() result2 = tool2() except Exception: result1 = 'fallback' result2 = 'fallback2' print(result1, result2) calls both tools inside try, so if tool2 fails, both fallback. try: result1 = tool1() except Exception: result1 = 'fallback' result2 = tool2() print(result1, result2) calls tool2 inside except, so tool2 runs only if tool1 fails.
  3. Final Answer:

    Option A correctly handles fallback and always calls second tool -> Option A
  4. Quick Check:

    Separate try-except for first tool, call second after [OK]
Hint: Put second tool call outside except to always run it [OK]
Common Mistakes:
  • Calling second tool only inside except block
  • Not catching exceptions for first tool
  • Putting both calls inside one try-except