uCalc API Version: 2.1.3-preview.2 Released: 6/16/2026

Warning

uCalc API Preview Release Notice:The documentation describes the intended behavior of the API. The current preview build contains incomplete features, unoptimized performance, and is subject to breaking changes.

Error = [ErrorInfo]

Property

Product: 

Fast Math Parser

Class: 

Callback

Remarks

Examples

Raises an error in a callback using a customized message with ErrorRaiseMessage
				
					using uCalcSoftware;

var uc = new uCalc();

static void RaiseErrorMessageCallback(uCalc.Callback cb) {
   if (cb.Arg(1) == 123) {
      cb.Error.Raise("I do not like this value!");
      cb.Return(cb.Arg(1));
   }
}


uc.DefineFunction("ErrRaiseMsgTest(Value)", RaiseErrorMessageCallback);
Console.WriteLine(uc.EvalStr("ErrRaiseMsgTest(111)"));
Console.WriteLine(uc.EvalStr("ErrRaiseMsgTest(123)"));
				
			
111
I do not like this value!
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call RaiseErrorMessageCallback(uCalcBase::Callback cb) {
   if (cb.Arg(1) == 123) {
      cb.Error().Raise("I do not like this value!");
      cb.Return(cb.Arg(1));
   }
}
int main() {
   uCalc uc;

   uc.DefineFunction("ErrRaiseMsgTest(Value)", RaiseErrorMessageCallback);
   cout << uc.EvalStr("ErrRaiseMsgTest(111)") << endl;
   cout << uc.EvalStr("ErrRaiseMsgTest(123)") << endl;
}
				
			
111
I do not like this value!
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub RaiseErrorMessageCallback(ByVal cb As uCalc.Callback)
      If cb.Arg(1) = 123 Then
         cb.Error.Raise("I do not like this value!")
         cb.Return(cb.Arg(1))
      End If
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      
      uc.DefineFunction("ErrRaiseMsgTest(Value)", AddressOf RaiseErrorMessageCallback)
      Console.WriteLine(uc.EvalStr("ErrRaiseMsgTest(111)"))
      Console.WriteLine(uc.EvalStr("ErrRaiseMsgTest(123)"))
   End Sub
End Module
				
			
111
I do not like this value!
A succinct example showing a function that unconditionally raises a custom error.
				
					using uCalcSoftware;

var uc = new uCalc();

static void MyHandler(Handle_uCalc h) {
   var uc = new uCalc(h);
   // This handler just logs the error and aborts
   Console.WriteLine($"Error Handler Caught: {uc.Error.Message}");
}
static void MyFunc(uCalc.Callback cb) {
   // This function always fails with a custom message
   cb.Error.Raise("Validation failed for input.");
}

uc.Error.AddHandler(MyHandler);
uc.DefineFunction("Validate()", MyFunc);
uc.EvalStr("Validate()"); // This call will trigger the error
				
			
Error Handler Caught: Validation failed for input.
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call MyHandler(Handle_uCalc h) {
   auto uc = uCalc(h);
   // This handler just logs the error and aborts
   cout << "Error Handler Caught: " << uc.Error().Message() << endl;
}
void ucalc_call MyFunc(uCalcBase::Callback cb) {
   // This function always fails with a custom message
   cb.Error().Raise("Validation failed for input.");
}
int main() {
   uCalc uc;
   uc.Error().AddHandler(MyHandler);
   uc.DefineFunction("Validate()", MyFunc);
   uc.EvalStr("Validate()"); // This call will trigger the error
}
				
			
Error Handler Caught: Validation failed for input.
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub MyHandler(ByVal h As Handle_uCalc)
      Dim uc As New uCalc(h)
      '// This handler just logs the error and aborts
      Console.WriteLine($"Error Handler Caught: {uc.Error.Message}")
   End Sub
   Public Sub MyFunc(ByVal cb As uCalc.Callback)
      '// This function always fails with a custom message
      cb.Error.Raise("Validation failed for input.")
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      uc.Error.AddHandler(AddressOf MyHandler)
      uc.DefineFunction("Validate()", AddressOf MyFunc)
      uc.EvalStr("Validate()") '// This call will trigger the error
   End Sub
End Module
				
			
Error Handler Caught: Validation failed for input.
Raises an error with a dynamic message if a validation check fails within a callback.
				
					using uCalcSoftware;

var uc = new uCalc();

static void ValidateValue(uCalc.Callback cb) {
   var val = cb.Arg(1);
   if (val > 100) {
      // The error message includes the problematic value, making it dynamic.
      cb.Error.Raise("Value exceeds maximum of 100. Got: " + val.ToString());
   } else {
      cb.Return(val);
   }
}

uc.DefineFunction("CheckValue(val)", ValidateValue);
Console.WriteLine(uc.EvalStr("CheckValue(50)"));
Console.WriteLine(uc.EvalStr("CheckValue(123)"));
				
			
50
Value exceeds maximum of 100. Got: 123
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call ValidateValue(uCalcBase::Callback cb) {
   auto val = cb.Arg(1);
   if (val > 100) {
      // The error message includes the problematic value, making it dynamic.
      cb.Error().Raise("Value exceeds maximum of 100. Got: " + to_string((int)val));
   } else {
      cb.Return(val);
   }
}
int main() {
   uCalc uc;
   uc.DefineFunction("CheckValue(val)", ValidateValue);
   cout << uc.EvalStr("CheckValue(50)") << endl;
   cout << uc.EvalStr("CheckValue(123)") << endl;
}
				
			
50
Value exceeds maximum of 100. Got: 123
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub ValidateValue(ByVal cb As uCalc.Callback)
      Dim val = cb.Arg(1)
      If val > 100 Then
         '// The error message includes the problematic value, making it dynamic.
         cb.Error.Raise("Value exceeds maximum of 100. Got: " + val.ToString())
      Else
         cb.Return(val)
      End If
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      uc.DefineFunction("CheckValue(val)", AddressOf ValidateValue)
      Console.WriteLine(uc.EvalStr("CheckValue(50)"))
      Console.WriteLine(uc.EvalStr("CheckValue(123)"))
   End Sub
End Module
				
			
50
Value exceeds maximum of 100. Got: 123
Internal Test: Demonstrates error recovery by having an error handler resume execution after a custom error is raised.
				
					using uCalcSoftware;

var uc = new uCalc();

static void RecoveryHandler(Handle_uCalc h) {
   var uc = new uCalc(h);
   Console.WriteLine($"Handler: Caught '{uc.Error.Message}'");
   // Attempt to recover by resuming execution.
   uc.Error.Response = ErrorHandlerResponse.Resume;
   Console.WriteLine("Handler: Resuming execution...");
}
static void RiskyOperation(uCalc.Callback cb) {
   var input = cb.ArgStr(1);
   if (input == "bad") {
      cb.Error.Raise("A recoverable error occurred.");
      // After the error handler resumes, this return value will be used.

   } else {
      cb.ReturnStr("Normal_OK");
   }
}

uc.Error.AddHandler(RecoveryHandler);
uc.DefineFunction("DoWork(s As String) As String", RiskyOperation);

Console.WriteLine("Result: " + uc.EvalStr("DoWork('good')"));
Console.WriteLine("---");
Console.WriteLine("Result: " + uc.EvalStr("DoWork('bad')"));
				
			
Result: Normal_OK
---
Handler: Caught 'A recoverable error occurred.'
Handler: Resuming execution...
Result: A recoverable error occurred.
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call RecoveryHandler(Handle_uCalc h) {
   auto uc = uCalc(h);
   cout << "Handler: Caught '" << uc.Error().Message() << "'" << endl;
   // Attempt to recover by resuming execution.
   uc.Error().Response(ErrorHandlerResponse::Resume);
   cout << "Handler: Resuming execution..." << endl;
}
void ucalc_call RiskyOperation(uCalcBase::Callback cb) {
   auto input = cb.ArgStr(1);
   if (input == "bad") {
      cb.Error().Raise("A recoverable error occurred.");
      // After the error handler resumes, this return value will be used.

   } else {
      cb.ReturnStr("Normal_OK");
   }
}
int main() {
   uCalc uc;
   uc.Error().AddHandler(RecoveryHandler);
   uc.DefineFunction("DoWork(s As String) As String", RiskyOperation);

   cout << "Result: " + uc.EvalStr("DoWork('good')") << endl;
   cout << "---" << endl;
   cout << "Result: " + uc.EvalStr("DoWork('bad')") << endl;
}
				
			
Result: Normal_OK
---
Handler: Caught 'A recoverable error occurred.'
Handler: Resuming execution...
Result: A recoverable error occurred.
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub RecoveryHandler(ByVal h As Handle_uCalc)
      Dim uc As New uCalc(h)
      Console.WriteLine($"Handler: Caught '{uc.Error.Message}'")
      '// Attempt to recover by resuming execution.
      uc.Error.Response = ErrorHandlerResponse.Resume
      Console.WriteLine("Handler: Resuming execution...")
   End Sub
   Public Sub RiskyOperation(ByVal cb As uCalc.Callback)
      Dim input = cb.ArgStr(1)
      If input = "bad" Then
         cb.Error.Raise("A recoverable error occurred.")
         '// After the error handler resumes, this return value will be used.
         
      Else
         cb.ReturnStr("Normal_OK")
      End If
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      uc.Error.AddHandler(AddressOf RecoveryHandler)
      uc.DefineFunction("DoWork(s As String) As String", AddressOf RiskyOperation)
      
      Console.WriteLine("Result: " + uc.EvalStr("DoWork('good')"))
      Console.WriteLine("---")
      Console.WriteLine("Result: " + uc.EvalStr("DoWork('bad')"))
   End Sub
End Module
				
			
Result: Normal_OK
---
Handler: Caught 'A recoverable error occurred.'
Handler: Resuming execution...
Result: A recoverable error occurred.
A succinct example that triggers a standard syntax error if the input value is negative.
				
					using uCalcSoftware;

var uc = new uCalc();

static void DoublePositive(uCalc.Callback cb) {
   // If input is negative, raise a syntax error.
   if (cb.Arg(1) < 0) {
      cb.Error.Raise(ErrorCode.Syntax_Error);
   }
   cb.Return(cb.Arg(1) * 2);
}

uc.DefineFunction("DoublePositive(x)", DoublePositive);
Console.WriteLine(uc.EvalStr("DoublePositive(10)"));
Console.WriteLine(uc.EvalStr("DoublePositive(-5)"));
				
			
20
Syntax error
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call DoublePositive(uCalcBase::Callback cb) {
   // If input is negative, raise a syntax error.
   if (cb.Arg(1) < 0) {
      cb.Error().Raise(ErrorCode::Syntax_Error);
   }
   cb.Return(cb.Arg(1) * 2);
}
int main() {
   uCalc uc;
   uc.DefineFunction("DoublePositive(x)", DoublePositive);
   cout << uc.EvalStr("DoublePositive(10)") << endl;
   cout << uc.EvalStr("DoublePositive(-5)") << endl;
}
				
			
20
Syntax error
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub DoublePositive(ByVal cb As uCalc.Callback)
      '// If input is negative, raise a syntax error.
      If cb.Arg(1) < 0 Then
         cb.Error.Raise(ErrorCode.Syntax_Error)
      End If
      cb.Return(cb.Arg(1) * 2)
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      uc.DefineFunction("DoublePositive(x)", AddressOf DoublePositive)
      Console.WriteLine(uc.EvalStr("DoublePositive(10)"))
      Console.WriteLine(uc.EvalStr("DoublePositive(-5)"))
   End Sub
End Module
				
			
20
Syntax error
Raising an error in a callback with ErrorRaise
				
					using uCalcSoftware;

var uc = new uCalc();

static void RaiseErrorCallback(uCalc.Callback cb) {
   if (cb.Arg(1) == 123) {
      cb.Error.Raise(ErrorCode.Unrecognized_Command);
   }
   cb.Return(cb.Arg(1));
}


uc.DefineFunction("ErrRaiseTest(Value)", RaiseErrorCallback);
Console.WriteLine(uc.EvalStr("ErrRaiseTest(111)"));
Console.WriteLine(uc.EvalStr("ErrRaiseTest(123)")); // The callback arbitrarily raises an error for 123
				
			
111
Unrecognized command
				
					#include <iostream>
#include "uCalc.h"

using namespace std;
using namespace uCalcSoftware;

void ucalc_call RaiseErrorCallback(uCalcBase::Callback cb) {
   if (cb.Arg(1) == 123) {
      cb.Error().Raise(ErrorCode::Unrecognized_Command);
   }
   cb.Return(cb.Arg(1));
}
int main() {
   uCalc uc;

   uc.DefineFunction("ErrRaiseTest(Value)", RaiseErrorCallback);
   cout << uc.EvalStr("ErrRaiseTest(111)") << endl;
   cout << uc.EvalStr("ErrRaiseTest(123)") << endl; // The callback arbitrarily raises an error for 123
}
				
			
111
Unrecognized command
				
					Imports System
Imports uCalcSoftware
Public Module Program
   
   Public Sub RaiseErrorCallback(ByVal cb As uCalc.Callback)
      If cb.Arg(1) = 123 Then
         cb.Error.Raise(ErrorCode.Unrecognized_Command)
      End If
      cb.Return(cb.Arg(1))
   End Sub
   Public Sub Main()
      Dim uc As New uCalc()
      
      uc.DefineFunction("ErrRaiseTest(Value)", AddressOf RaiseErrorCallback)
      Console.WriteLine(uc.EvalStr("ErrRaiseTest(111)"))
      Console.WriteLine(uc.EvalStr("ErrRaiseTest(123)")) '// The callback arbitrarily raises an error for 123
   End Sub
End Module
				
			
111
Unrecognized command