Lua 的 error 函数

作者:IMPYLH日期:2025/11/21

Lua 的 error 函数是一个用于显式抛出错误的内置函数,它会中断当前程序的正常执行流程。该函数有两种调用形式:

  1. error(message, level)
  2. error(message)

参数说明:

  • message:字符串类型的错误信息,是必选参数
  • level:可选参数,指定错误发生的位置层级,默认为1(表示调用error的位置)

使用示例:

通过 Shift 运行

1function divide(a, b)
2    if b == 0 then
3        error("除数不能为零")  -- 抛出错误
4    end
5    return a / b
6end
7
8-- 调用示例
9local ok, result = pcall(divide, 10, 0)
10if not ok then
11    print("发生错误:", result)  -- 输出:发生错误:除数不能为零
12end
13

错误处理建议:

  1. 通常在函数参数检查或前置条件验证时使用error
  2. 建议配合pcall/xpcall使用以实现错误捕获
  3. 生产代码中应该提供有意义的错误信息

与assert的区别:

  • error总是抛出错误
  • assert只在条件为false时抛出错误
  • assert允许自定义错误消息

高级用法:
可以抛出table类型的错误信息:

1error({
2    code = 1001,
3    msg = "无效的参数",
4    detail = "参数类型应为number"
5})
6

在Lua 5.2+版本中,error函数还支持第三个参数,用于控制是否在错误信息中包含调用栈信息。


Lua 的 error 函数》 是转载文章,点击查看原文


相关推荐


使用 Docker 部署 RabbitMQ 的详细指南
s***55812025/11/19

使用 Docker 部署 RabbitMQ 的详细指南 在现代应用程序开发中,消息队列系统是不可或缺的一部分。RabbitMQ 是一个流行的开源消息代理软件,它实现了高级消息队列协议(AMQP)。本文将详细介绍如何使用 Docker 部署 RabbitMQ,并提供一些配置和管理的技巧。 1. 前期准备 在开始之前,请确保您的系统上已经安装了 Docker。如果尚未安装,可以参考 Docker 官方文档 或我写的前面一篇文章 CentOS 上安装 Docker 的详细指南 进行安装。 2.


LVS-NAT 模式负载均衡集群部署与配置
ttthe_MOon2025/11/18

LVS(Linux Virtual Server)是基于 Linux 的负载均衡群集技术,NAT 模式通过地址转换实现内外网通信与负载分发,核心是 LVS 服务器充当网关,将外网请求转发至后端 Web 服务器。 一、核心概念 1. LVS 基础 本质:作用在四层的负载均衡器,不提供网页服务,仅通过算法为后端服务器分流减压。 核心价值:解决单台服务器性能瓶颈,实现高可用(HA)和负载均衡(LB)。 集群定义:3 台以上服务器对外表现为一个整体,提供单一访问入口(IP / 域名)。 2. NAT 模


关于No Chatbot的思考
HeteroCat2025/11/17

前言 近期在大模型圈子里,“No Chatbot”这一概念潇潇浮出江面,它意指不再将智能体局限于传统的对话式问答系统,而是发展为具备主动规划、调用工具和协作能力的智能助理。作为一名长期研究提示词工程和智能体应用的创作者,我想结合最近的思考,与大家探讨这一趋势的内涵与意义。 什么是“No Chatbot” “No Chatbot”并不是不要聊天机器人,而是指下一代智能体需要突破单纯聊天交互的框架,具备更强的自主性和执行力。它主要包含以下特征: 任务导向:关注完成复杂任务,而不是只回答问题。系统会


Spring boot启动原理及相关组件
q***38512025/11/16

优质博文:IT-BLOG-CN 一、Spring Boot应用启动 一个Spring Boot应用的启动通常如下: @SpringBootApplication @Slf4j public class ApplicationMain { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(ApplicationMain.


UDP服务端绑定INADDR_ANY后,客户端该用什么IP访问?
咸鱼_要_翻身2025/11/15

目录 一、问题 二、详细解释 1、INADDR_ANY 到底是什么? 2、客户端可以使用什么IP访问? 三、为什么要传IP? 1、网络层寻址的需要 2、操作系统协议栈的需要 3、服务端主机区分流量的需要 四、总结 一、问题         在UDP协议中,服务端使用INADDR_ANY了,然后客户端可以使用什么IP可以访问服务端?为什么要传IP?这是一个非常经典且重要的问题。我们来分步拆解和解答。 核心答案:当UDP服务端绑定到 INADDR_ANY (其值通常是


【Kubernetes】K8s 集群 Ingress 入口规则
陈陈CHENCHEN2025/11/14

Ingress 是管理从集群外部访问集群内部服务的入口规则(HTTP 和 HTTPS)的 API 对象,核心功能是将外部到达集群的 HTTP/HTTPS 请求,根据主机名(host)和路径(path)转发到不同的后端 Service,一起来看看如何使用吧! 1、概念 1.1、Ingress(资源) 在 K8s 中创建的 YAML 文件,只是一份规则声明,定义 “当访问 a.example.com 时,将流量转发给 service-a” 之类的规则 1.2、Ingress Control


11种方法解决iPhone上共享相册不显示的问题[2025]
Digitally2025/11/12

如果你想查看或下载朋友或家人通过iCloud链接邀请与你共享的照片,你可以利用iPhone上的共享相册功能。然而,有时这个看似无缝的过程会出现问题,让用户不禁想问:“为什么我没有收到共享相册邀请?”或“如何修复共享相册不显示”。好的,本页面致力于揭示背后的原因,并提供有效的解决方法,确保你的共享相册体验保持完美。但在那之前,让我们先简要了解一下“共享相册”。 第一部分:什么是共享相册?如何接受共享相册邀请? 什么是共享相册?“共享相册”是一个在线空间,多人可以在此添加、查看和互动照片和视频。


Java 17 密封类(Sealed Classes)实战:从类型安全到架构解耦的范式升级
听风吟丶2025/11/10

在 Java 17 之前,面向对象编程中的 “类继承” 一直存在一个痛点:一个公开类(public class)可以被任何其他类无限制继承,导致类型体系失控、代码维护成本升高。例如,定义一个 “支付方式” 基类后,开发者可能会随意继承出不符合业务逻辑的子类(如 “现金支付” 继承 “电子支付”),破坏类型体系的完整性。为解决这一问题,Java 17 正式将密封类(Sealed Classes) 纳入标准特性,通过 “显式指定子类范围”“限制继承权限”“强制类型覆盖”,从语言层面实现了类型体系的可


网络协议之传统DNS存在的问题以及httpdns
小董亮出你的8块腹肌吧!2025/11/8

写在前面 传统的DNS虽然使用的非常广泛,但是也是存在一些问题的,本文就来一起来看下,以及其解决方案http dns。 1:传统DNS存在的问题 1.1:域名缓存问题 用户某次访问时,可能已经有了距离用户更近的服务IP,但是因为还是使用缓存的那个服务IP(注意并不是不能用了),所以就无法拿到最优的那个IP了。 1.2:域名转发问题 存在这个问题的原因是,有些运营商,自己并不会取获取DNS信息,而是将这个工作转发到其他的运营商来做,而DNS服务器来返回IP地址时会根据当前请求者所在的运


Python编程实战 · 基础入门篇 | 集合(set)
程序员爱钓鱼2025/11/6

在 Python 的基础数据结构中,除了列表(list)、元组(tuple)、字典(dict),还有一种特殊但非常实用的数据类型——集合(set)。 集合的最大特点是:不重复、无序、可进行集合运算。 它常用于去重、数据筛选、关系判断等场景,是数据处理中的高效利器。 一 什么是集合(set) 集合(Set)是一种 无序、可变 的数据容器, 用于存放 不重复的元素。 在 Python 中,可以通过 {} 或 set() 创建集合。 fruits = {"apple", "banana", "ch

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读