# Exception and return-value call paths (source audit) Scope: bundled `source_reference/dobot_core/` snapshots. Line numbers refer to those snapshots. Only **direct calls** and explicit exception syntax found by AST are shown. This does not establish runtime return values, transport health, or complete exception propagation. | API | Location | Direct calls | Explicit raise | Caught exceptions | |---|---|---|---|---| | `connect` | `dobot_ctrl.py:36` | `_ctrl.connect` | — | — | | `disconnect` | `dobot_ctrl.py:48` | `_ctrl.disconnect` | — | — | | `reset_error` | `dobot_ctrl.py:74` | `_ctrl.reset_error` | — | — | | `get_motion_complete` | `dobot_ctrl.py:87` | `_ctrl.get_motion_complete` | — | — | | `wait_for_complete` | `dobot_ctrl.py:90` | `_ctrl.wait_for_complete` | — | — | | `get_current_position` | `dobot_ctrl.py:288` | `_ctrl.get_current_position` | — | — | | `get_current_angle` | `dobot_ctrl.py:294` | `_ctrl.get_current_angle` | — | — | | `get_error` | `dobot_ctrl.py:312` | `_ctrl.get_error` | — | — | | `get_error_code` | `dobot_ctrl.py:315` | `_ctrl.get_error_code` | — | — | | `get_error_count` | `dobot_ctrl.py:318` | `_ctrl.get_error_count` | — | — | | `move` | `dobot_ctrl.py:420` | `_ctrl.move` | — | — | | `get_IO` | `dobot_ctrl.py:493` | `_ctrl.get_IO` | — | — | | `get_digital_input` | `dobot_ctrl.py:496` | `_ctrl.get_digital_input` | — | — | | `set_IO` | `dobot_ctrl.py:499` | `_ctrl.set_IO` | — | — | | `connect` | `dobot_tcp.py:108` | — | `RuntimeError(f'Dobot feedback dtype size mismatch: MyType.itemsize={MyType.itemsize}, expected={self.FEEDBACK_SIZE}')` | `Exception` | | `disconnect` | `dobot_tcp.py:170` | — | — | `Exception` | | `reset_error` | `dobot_tcp.py:484` | `_dashboard.ClearError`, `_handle_command_reply` | — | — | | `get_current_position` | `dobot_tcp.py:535` | `_dashboard.GetPose`, `_dashboard_values` | `RuntimeError(f'GetPose returned too few values: {values}')` | — | | `get_current_angle` | `dobot_tcp.py:560` | `_dashboard.GetAngle`, `_dashboard_values` | `RuntimeError(f'GetAngle returned too few values: {values}')` | — | | `wait_for_complete` | `dobot_tcp.py:653` | `_handle_command_reply`, `_motion_error_active`, `_move.Sync` | — | — | | `get_error` | `dobot_tcp.py:688` | `_error_manager.get_error` | — | — | | `get_error_code` | `dobot_tcp.py:692` | `_error_manager.get_error_code` | — | — | | `get_error_count` | `dobot_tcp.py:700` | `_error_manager.get_error_count` | — | — | | `move` | `dobot_tcp.py:1310` | `_handle_command_reply`, `_j_to_mg400`, `_move.JointMovJ`, `_move.MovJ`, `_move.MovL`, `_p_to_mg400`, `_set_motion_target`, `_vector6`, `_wait_motion_start_or_error` | — | `Exception` | | `get_digital_input` | `dobot_tcp.py:1751` | `_dashboard.DI`, `_ok`, `_parse_reply_values` | — | `Exception` | | `get_IO` | `dobot_tcp.py:1796` | `_scalar_status`, `_state` | `ValueError('id_num must be >= 1')` | — | | `set_IO` | `dobot_tcp.py:1808` | `_dashboard.DO`, `_ok` | — | — | ## Interpretation - Distinguish `DobotCtrl` delegation to `_ctrl` from `DobotTcp` delegation to `_error_manager`. - `get_error*` reaches `DobotErrorManager._get_error_records()`. See [return/failure reference](return_failure_quick_reference.md) for the ambiguity between communication failure and no alarm. - The `Sync()` reply from `wait_for_complete()` is not proof of safe motion completion. - Indirect exceptions, properties, dynamic dispatch, and third-party exceptions are not traced.