printerr
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — printerr
printerr
定义
printerr() 是一个专门用来输出错误信息的函数。它和 print() 的功能类似,但有两个关键区别:
- 输出到标准错误流(stderr)而不是标准输出流(stdout),这意味着在终端中运行时,错误信息通常会以红色文字显示
- 在 Godot 编辑器中,
printerr()的输出同样显示在输出面板中,但不会被_process()等高频调用淹没——因为错误通常是异常情况
打个比方:print() 是普通的便签纸(白纸黑字),printerr() 是红色的警告标签(红纸白字),让你一眼就能分辨出"这条信息是错误"。
函数签名
C#
// C# 中使用 GD.PrintErr
GD.PrintErr(params object[] values);GDScript
func printerr(...) -> void参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
...(可变参数) | Variant(任意类型) | 否 | 可以传入任意数量、任意类型的值,行为与 print() 相同,但输出到错误流 |
返回值
无返回值(void)。此函数仅用于在控制台输出错误信息。
代码示例
基础用法:输出错误信息
C#
using Godot;
public partial class PrinterrExample : Node
{
public override void _Ready()
{
// 普通输出
GD.Print("正常信息:游戏正在启动");
// 运行结果: 正常信息:游戏正在启动
// 错误输出
GD.PrintErr("错误信息:无法找到配置文件!");
// 运行结果(显示为错误): 错误信息:无法找到配置文件!
}
}GDScript
extends Node
func _ready():
# 普通输出
print("正常信息:游戏正在启动")
# 运行结果: 正常信息:游戏正在启动
# 错误输出
printerr("错误信息:无法找到配置文件!")
# 运行结果(显示为错误): 错误信息:无法找到配置文件!实际场景:安全的文件加载
C#
using Godot;
public partial class SaveManager : Node
{
public void LoadGameData()
{
string savePath = "user://save_game.dat";
if (!FileAccess.FileExists(savePath))
{
GD.PrintErr($"存档文件不存在: {savePath}");
return;
}
using var file = FileAccess.Open(savePath, FileAccess.ModeFlags.Read);
if (file == null)
{
GD.PrintErr($"无法打开存档文件: {savePath}");
GD.PrintErr($"错误原因: {FileAccess.GetOpenError()}");
return;
}
GD.Print("存档加载成功");
}
}GDScript
extends Node
func load_game_data() -> void:
var save_path = "user://save_game.dat"
if not FileAccess.file_exists(save_path):
printerr("存档文件不存在: " + save_path)
return
var file = FileAccess.open(save_path, FileAccess.READ)
if file == null:
printerr("无法打开存档文件: " + save_path)
printerr("错误原因: " + str(FileAccess.get_open_error()))
return
print("存档加载成功")
file.close()进阶用法:封装分级日志系统
C#
using Godot;
public static class Logger
{
public enum EnumLogLevel { Info, Warning, Error }
public static void Log(string message, EnumLogLevel level = EnumLogLevel.Info)
{
string prefix = level switch
{
EnumLogLevel.Info => "[INFO]",
EnumLogLevel.Warning => "[WARN]",
EnumLogLevel.Error => "[ERROR]",
_ => "[LOG]"
};
string output = $"{prefix} {message}";
switch (level)
{
case EnumLogLevel.Error:
GD.PrintErr(output);
break;
default:
GD.Print(output);
break;
}
}
}
public partial class NetworkManager : Node
{
public void ConnectToServer(string address)
{
Logger.Log($"正在连接服务器: {address}");
if (string.IsNullOrEmpty(address))
{
Logger.Log("服务器地址为空!", Logger.EnumLogLevel.Error);
return;
}
}
}GDScript
extends Node
enum EnumLogLevel { INFO, WARNING, ERROR }
func log_message(message: String, level: int = EnumLogLevel.INFO) -> void:
var prefix = "[INFO]"
match level:
EnumLogLevel.INFO:
prefix = "[INFO]"
EnumLogLevel.WARNING:
prefix = "[WARN]"
EnumLogLevel.ERROR:
prefix = "[ERROR]"
var output = "%s %s" % [prefix, message]
match level:
EnumLogLevel.ERROR:
printerr(output)
_:
print(output)
func connect_to_server(address: String) -> void:
log_message("正在连接服务器: " + address)
if address == "":
log_message("服务器地址为空!", EnumLogLevel.ERROR)注意事项
输出到标准错误流:
printerr()将信息输出到 stderr 而非 stdout。在终端中运行游戏时,你可以将普通输出和错误输出重定向到不同的文件,比如godot 2>error.log只把错误信息保存到文件中。与
push_error()的区别:printerr()只是简单地把错误文字输出到控制台。push_error()除了输出错误信息外,还会在 Godot 编辑器的"调试器"面板中生成一条可点击的错误条目,点击可以跳转到对应的代码行。如果你想在编辑器中方便地追踪错误来源,推荐使用push_error()。C# 中使用
GD.PrintErr():C# 中对应的函数是GD.PrintErr(),行为与 GDScript 的printerr()一致。
