In Object of type '…': Attempt to connect nonexistent signal '…' to callable '…' in Godot 4
By Eduardo Orellana · Updated
The object has no signal by that name: it is misspelled, declared on a different script, or a Godot 3 name. connect("health_changed", _on_changed) on a node without that signal prints In Object of type 'Node': Attempt to connect nonexistent signal 'health_changed' to callable 'Node(repro.gd)::_on_changed'. Declare the signal with signal health_changed, and connect through the signal itself: health_changed.connect(_on_changed).
AppImage, x86_64. Ubuntu 22.04, Debian 12, Fedora 39 or newer.
Intel or AMD Chromebook, with Linux turned on.
What Godot is checking
Object.connect() looks the signal up by name on the object's class and script. When it is not there, the engine prints this error and makes no connection; the script carries on, and the method simply never runs.
Connecting through the signal, health_changed.connect(...), lets the analyzer check the name when the script loads, so a typo is a parse error instead of a silent missing connection.
Reproduce it
A connect() by string to a signal the node never declares.
extends Node
func _on_changed() -> void:
print("changed")
func _ready() -> void:
connect("health_changed", _on_changed)
print("after")
What Godot 4.7.2 prints
Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org
ERROR: In Object of type 'Node': Attempt to connect nonexistent signal 'health_changed' to callable 'Node(repro.gd)::_on_changed'.
at: connect (core/object/object.cpp:1550)
GDScript backtrace (most recent call first):
[0] _ready (res://answers/attempt-to-connect-nonexistent-signal/repro.gd:7)
afterFix it
Declare the signal and connect through it.
extends Node
signal health_changed
func _on_changed() -> void:
print("changed")
func _ready() -> void:
health_changed.connect(_on_changed)
health_changed.emit()
What the fixed script prints
Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org
changedGodot 3 signal names
Some signals were renamed in Godot 4. A Godot 3 name connected by string fails this way. Godot's 3-to-4 converter renames the ones it knows.
Verified on Godot 4.7.2
Both scripts on this page were run headless on Godot 4.7.2 (4.7.2.stable.mono.official.ed1daf0bf) on 18 October 2026, and the output above is what Godot printed, unedited.
Where the check lives in Godot's source: [object.cpp line 1550, the message](https://github.com/godotengine/godot/blob/4.7.2-stable/core/object/object.cpp#L1550).
Questions
- Why did my method never run with no other error?
- This error is the only sign: the connection was not made. Connecting through the signal object turns a misspelled name into a parse error.
- How do I list an object's signals?
- get_signal_list() returns them, and the Node dock's Signals tab shows them for a node in the editor.
Related
- Signal is already connected to given callable
- Function "…()" not found in base self
- Every verified Godot 4 answer
- How to connect signals in code in Godot 4: signal.connect(callable)
- Invalid call. Nonexistent function '…' in base 'Nil' in Godot 4
- Invalid assignment of property or key '…' with value of type '…' on a base object of type 'Node2D' in Godot 4
- Cannot call method '…' on a null value in Godot 4
- Can Nova 2 Lite write working Godot 4 code? 2 of 15 on the first try
Flockbay's agent reads Godot's debugger output and fixes errors like this one in your project, on the official Godot.
Download Flockbay free