0.1.8
Loading...
Searching...
No Matches
exceptions.py
Go to the documentation of this file.
1"""
2Validation-specific exceptions for PyHelios.
3
4Provides ValidationError that extends HeliosInvalidArgumentError with
5enhanced error messaging and context information.
6"""
7
8class ValidationError(ValueError):
9 """
10 Validation-specific error with standardized messaging.
11
12 Raised when parameter validation fails, with clear error messages that include:
13 - Parameter name and expected type/range
14 - Actual value provided and its type
15 - Actionable solution or correct usage example
16
17 Following PyHelios's fail-fast philosophy, validation errors are raised
18 immediately at API boundaries before reaching C++ code.
19 """
20
21 def __init__(self, message: str, param_name: str = None, function_name: str = None,
22 expected_type: str = None, actual_value=None):
23 """
24 Initialize validation error with enhanced context.
25
26 Args:
27 message: Primary error message
28 param_name: Name of the parameter that failed validation
29 function_name: Name of the function where validation failed
30 expected_type: Expected type or range description
31 actual_value: The actual value that failed validation
32 """
33 # Build enhanced error message with context
34 enhanced_message = message
35
36 if function_name:
37 enhanced_message = f"{function_name}(): {enhanced_message}"
38
39 if param_name and expected_type and actual_value is not None:
40 enhanced_message += f" (Parameter '{param_name}' expected {expected_type}, got {actual_value} of type {type(actual_value).__name__})"
41 elif param_name:
42 enhanced_message += f" (Parameter: '{param_name}')"
43
44 super().__init__(enhanced_message)
45
46 # Store context for programmatic access
47 self.param_name = param_name
48 self.function_name = function_name
49 self.expected_type = expected_type
50 self.actual_value = actual_value
51
52
53def create_validation_error(message: str, param_name: str = None,
54 function_name: str = None, expected_type: str = None,
55 actual_value=None, suggestion: str = None) -> ValidationError:
56 """
57 Factory function for creating ValidationError with consistent formatting.
58
59 Args:
60 message: Core error message
61 param_name: Parameter name that failed
62 function_name: Function where validation failed
63 expected_type: Description of expected type/range
64 actual_value: Actual value provided
65 suggestion: Helpful suggestion for fixing the error
66
67 Returns:
68 ValidationError with enhanced message
69 """
70 full_message = message
71 if suggestion:
72 full_message += f" {suggestion}"
73
74 return ValidationError(
75 full_message,
76 param_name=param_name,
77 function_name=function_name,
78 expected_type=expected_type,
79 actual_value=actual_value
80 )
Validation-specific exceptions for PyHelios.
Definition exceptions.py:19
__init__(self, str message, str param_name=None, str function_name=None, str expected_type=None, actual_value=None)
Initialize validation error with enhanced context.
Definition exceptions.py:32
ValidationError create_validation_error(str message, str param_name=None, str function_name=None, str expected_type=None, actual_value=None, str suggestion=None)
Factory function for creating ValidationError with consistent formatting.
Definition exceptions.py:69