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.

Download for macOSDownload for Windows

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)
after

Fix 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

changed

Godot 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.