错误与异常处理

深入 Laravel 的错误处理与异常处理机制 在 Laravel 中,错误处理是一个核心功能,它帮助开发者捕获和响应应用中发生的错误。Laravel 使用 PHP 的异常处理机制来管理错误和异常。Laravel 的错误处理和异常处理机制是构建健壮应用的关键。通过本文的介绍,你应该对 Laravel 的错误和异常处理有了更深入的理解。合理利用这些机制,可以帮助你更有效地捕获和响应应用中的问题,提高应用的稳定性和用户体验。本文详细介绍了 Laravel 的错误处理和异常处理机制,包括基本概念、实现方式和实践示例。 阅读详情

在 go 中没有 try catch 的异常处理语句,但是有 defer,panic,recovor,error 来控制程序执行流程

panic

当某函数 fun 出发 panic 异常,fun 后面代码停止运行,转而去运行 defer 代码(如果有 defer),再然后结束 fun 函数,并将当前处理权交给 fun 的调用函数,recover 之后函数正常往下运行。panic 返回值通过 recover 函数获取,如果 panic 函数没有被调用或者没有返回值,那么 recover 返回 nil

recover 捕获panic异常

recover 函数本身是用来处理 panic,表示当前 goroutine 是否有 panic 产生,只有当 recover 函数写在 defer 中时候方能起到捕获 panic 异常的效果

recover 很像一个 try catch,一旦把异常捕获到了,之后的程序又是正常执行了

demo1:

package main

import "fmt"

/*
错误和异常的区别是什么?
·错误是可以预先知道结果的,如:做除法的时候被除数不能为0
·异常是不可预知的,大部分是因为程序员代码编写不规范导致,如下:
    ·空指针引用
    ·下标越界
    ·除数为0
    ·不应该出现的分支,如default
    ·并发读写相同map
    ·往关闭的通道写数据
    ·输入不应该引起的函数错误

panic用法:用来抛出错误,使用时可能导致主线程挂掉,同时其他协程都会挂掉。可以配合同级别的recover使用,保证主线程不挂掉
recover用法:将recover()写在defer中,在可能发生panic的地方之前,先调用此defer的东西,当程序遇到panic时,系统会
跳过后面的代码,执行defer中的代码,返回捕获到的panic的值


*/

func myPanic() {
    x := 10
    y := 0
    c := x / y
    //panic("我就是个错误")
    fmt.Println(c)

}

func main() {
    fmt.Println("hello world,cc")
    defer func() {  
        if err := recover(); err != nil {
            fmt.Println("出错了", err)
        }
    }()
    myPanic()
    fmt.Println("这里执行不了")
}

error 基本用法

err != nil 处理错误上方我们看到了 panic 处理异常的方式,这里我们再看看 error 处理错误的方式

func foo() error {
  // ...
}

func main() {
  // 异常处理
  if err := foo; err != nil {
    // ...
  }
}

新的处理方式

上面通过不断的判断 err!=nil 会很麻烦,原因我们可以试想一下,如果一个方法会返回 error,而我们需要多次调用它,这就意味着每调用一次,那么我们下面就要进行 err!=nil 来判定一次错误,这会非常麻烦,因为我们有什么方式可以优化它呢?

type foo struct {
    x Xxx
    e error
}

func (f *foo) bar() {
    if f.e != nil {
        return
    }
    f.e = foobar()
}

采用新的方式来判断错误,我们只需要把经常产生返回错误的方法 foobar() 封装起来让它不用总是返回 error,并且里头做一个判断,如果调用该固定返回 error 的方法之前错误不是 nil,则直接结束,如果错误是 nil,则结构体中 e 接续承接该固定返回 error 的方法,所以我们可以在调用好几轮这个 bar() 方法后,最后一步再去对 error 做判断

产生一个错误

// 返回值是 error 类型
errors.New("一个新错误")

自定义错误

因为 error 接口有一个 Error 方法,当我们实现这个方法时候,实际上也就是实现了这个接口,也就是说自己的这个 struct 也成为了 error 接口

type foo struct {
    // ...
}

func (f foo) Error() string {
    // ...
}

当实现了 error 接口之后打印就能看到错误信息了

error 实践用法

当我们需要判断 error 是不是哪种 error 的时候我们可以使用 errors.Is() 函数,这个是在 go1.13 之后出现的很好判定 err 的用法

err := io.EOF
err = fmt.Errorf("xxxxxxx%w", io.EOF)
// 下方 if 是 true
if errors.Is(err, io.EOF) {
    fmt.Println("Is函数可以用来明确此 error 是不是某种异常,虽然 err != io.EOF")
}

还有errors.As()用力啊判定 err 是不是某一种类型

用panic 还是 error?

一般而言只用 error 错误处理,panic 是重大异常;error 是程序员可以预知的错误,panic 是程序员预料之外的异常

所以有一个原则就是我们写代码时候尽量使用 error 进行错误处理,尽量去避免 panic 处理,触发实在遇到了

参考:golang异常处理panic recover error基本介绍_golang的recover如何获取行号_abcnull的博客-优快云博客

有空必看 - PHP错误与异常处理 请一定要注意,没有特殊说明:本例 PHP Version < 7   说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php <?php $num = 0; try { echo 1 / $num; } catch (Exception $e) { echo $e->getMessage(); } ?> 我的问题是:这段程序能正确的. 阅读详情

相关推荐

【AIGC】COT思维链:让AI学会拆解问题,像人一样思考

COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。

智兔唯新的博客 9001

python中错误和异常处理

错误和异常处理 在python中一共有2种错误:一种是语法错误,另外一种是异常。 语法错误 语法错误也叫做解析错误,是指python无法正确的识别代码的造成的。根本原因在于人的行为:手残,脑残和眼残的行为。 解决方法:按照正确的语法进行书写就没这个错误了! 异常 异常是指在语法正确的前提下,程序的报错就是异常。 它是在程序异常时单独存在的一个对象,可以对其进行获取或其他操作 异常...

秋叶夏风的博客 1224

一次渗透测试引发的Json格式下CSRF攻击的探索

一次渗透测试引发的Json格式下CSRF攻击的探索

weixin_52501704的博客 1044

PHP错误处理&异常处理

避免过度捕获异常:不要过度捕获异常,这可能导致隐藏潜在的问题或掩盖错误。只捕获你知道如何处理的异常,并将其他未处理的异常传递给更上层的代码进行处理。抛出自定义异常:通过定义自定义异常类,可以更好地组织和标识特定类型的异常。这样可以确保异常被正确捕获,并且避免特定的异常被更一般的异常类型捕获导致无法执行特定的异常处理逻辑。块来处理不同类型的异常。使用合适的异常类型:PHP 中有许多内置的异常类型,如。,而将未知或不可处理的异常传递给更上层的代码进行处理。块进行处理:根据不同的异常类型,使用多个。

代码炼金术 4865

一文读懂资管系统里的“清算路径”:钱和券的“导航地图”

简单来说,清算路径就是给每一笔交易预设好的“导航路线”。钱从哪个银行账户出?通过哪家证券公司去买?用哪个股东账户去登记?买回来的股票记在谁的名下?“清算路径”就是把这一连串问题的答案提前配置好。它连接了银行托管户(钱的源头)、券商(交易的中介)和交易所(买卖的市场)。没有配好这条路,交易就无法闭环。清算路径是金融基础设施的缩影。资金如何安全地从银行流向市场;资产如何合法地归属到产品名下;交易数据如何在不同系统间流转。它是资管系统能够日复一日、准确无误地处理亿万级交易的基石。

m0_37607945的博客 233

Nordic nRF52832实战:手把手教你搭建智能手环BLE通信框架(附完整代码)

本文详细介绍了如何使用Nordic nRF52832芯片搭建智能手环的BLE通信框架,涵盖芯片优势、协议栈初始化、低功耗广播策略及健康数据服务实现。通过完整代码示例和架构设计,帮助开发者快速掌握蓝牙低功耗通信技术,适用于可穿戴设备开发。

weixin_29192141的博客 246

错误和异常处理

python错误和异常处理

橙子味冰可乐的博客 750

告别“静态组件”:Adobe XD的堆栈+状态,打造“活”的响应式UI

今天,我想分享一套能彻底告别这种“笨方法”的、Adobe XD中的进阶技巧,通过组合使用“堆栈”、“内边距”和“组件状态”,去构建一个能自动适应内容、真正“活”起来的智能响应式组件。

Kingsdesigner的博客 760

bcb异常处理显示错误行号_PHP错误和异常处理

错误处理 1. 语法错误 2. 运行时的错误 3. 逻辑错误 错误报告: 错误 E_ERROR 警告 E_WARNING 注意 E_NOTICE 开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试 运行阶段:不要让程序输出任何一种错误报告(不能让用户看到(懂技术, 不懂技术)) 将错误报告写入日志中 一、指定错误报告 error_reporting = E_LL 二、关闭错误输出 disp...

weixin_40005542的博客 174

损失函数大汇总(八)(IoU Loss附公式推导与代码)

本文详细介绍了IoU Loss及其在图像分割中的应用。IoU(交并比)是衡量预测区域与真实区域重叠程度的指标,IoU Loss定义为1-IoU,直接优化区域重叠质量。文章推导了IoU的数学表达式和梯度计算,分析了其函数特性:全局耦合梯度、对漏检误检的双重惩罚、适合类别不平衡任务。与Dice Loss相比,IoU更强调覆盖质量而非相似度。实际应用中IoU Loss常与BCE组合使用,前者保证训练稳定性,后者优化整体区域质量。文章还提供了IoU Loss的代码实现,适用于二值分割、小目标提取等场景,特别当任务评

悦学共鸣,温柔以待,汇聚光芒,共同成长 413

智能车图像处理0-变量释义

这篇文章主要讲述智能车图像处理中,各篇主要变量的含义。如果在看具体分析代码时感到困惑,可以在本篇文章中查询,辅助理解。

taiyuezyh的博客 3666

Java异常处理错误

Java异常处理错误        发现错误的最佳时期是在编译阶段,也就是在你运行程序之前。然而,编译期间并不能找出所有的错误,余下的问题必须在运行阶段解决。这就需要错误源通过某种方式把适当的信息传给某个接收者,该接收者知道如何处理这个问题。        Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型,可靠的程序的生成,并且通过这种方式可以使你更加自信:你的应用中没有

奋起的Coder。。。 937

Ardupilot chibios IO固件,IO与FMU通信,固件下载(3)

目录 文章目录目录摘要 摘要 本节主要记录自己学习IO与FMU通信

陌城烟雨 2798

通过异常处理错误

异常基础

m0_72710328的博客 357

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MyBatis异常处理与错误排查

MyBatis作为一款流行的Java持久层框架,在处理异常和排查错误方面有着独特的功能和优势。总之,MyBatis在异常处理与错误排查方面具有独特的优势和功能,可以帮助开发者快速定位和解决系统中的问题。MyBatis在处理异常和排查错误方面具有强大的功能,可以帮助开发者快速定位和解决系统中的问题。MyBatis在异常处理与错误排查方面具有强大的功能和优势,可以帮助开发者快速定位和解决系统中的问题。(2) 日志分析工具:通过日志分析工具对系统日志进行解析和分析,找出异常和错误的位置和原因。

searchboy2025的博客 204

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C语言中的错误与异常处理总结

在C语言中,可以自定义错误处理函数来统一处理错误。例如,可以定义一个错误处理函数`error_handler`,并在发生错误时调用它。```cbreak;break;```

极客代码 2370

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++异常处理与错误管理

C++异常处理与错误管理是保证程序稳定性和安全性的重要手段。通过合理使用异常处理机制和错误处理策略,我们可以有效地捕获和处理程序中的异常和错误,提高程序的健壮性和可靠性。在实际编程过程中,我们应该遵循最佳实践,合理使用异常处理和错误管理,以提高程序的质量和性能。在未来,C++异常处理与错误管理的研究和改进将继续深入,以满足不断变化的需求和挑战。同时,程序员也需要不断学习和掌握新的技术和方法,以更好地应对程序设计和开发中的各种问题。

2501_92487619的博客 316

Golang错误和异常处理的正确姿势

序言 错误和异常是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。从表面上看,一切皆错误的思路更简单,而异常的引入仅仅增加了额外的复杂度。 但事实并非如此。众所周知,Golang遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。 错误和异常处理是程序...

延宝小白马的博客 4909

PHP错误和异常处理

[TOC] PHP错误和异常处理 PHP的错误和异常是两个概念 PHP的错误处理: 1.语法错误 2.环境错误 3.逻辑错误 PHP的异常类型: PHP7的错误和异常 PHP 7 改变了大多数错误的报告方式。 不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为Error...

chuanguan1820的博客 295

PHP错误与异常处理

再谈PHP错误与异常处理   博客好久没有更新了,实在惭愧,最近在忙人生大事,哈哈!这段时间没有看什么新的东西,结合项目中遇到的PHP异常处理问题,我又重新梳理了之前模糊的概念,希望对大家理解PHP异常处理有所帮助。   请一定要注意,没有特殊说明:本例PHP Version < 7   说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.p...

南方有岛 343

Go错误和异常处理

基础知识 错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中 ;而异常指的是不应该出现问题的地方出现了问题,比如引用了空指针,这种情况在人们的意料之外。可见,错误是业务过程的一部分,而异常不是 。 Golang中引入error接口类型作为错误处理的标准模式,如果函数要返回错误,则返回值类型列表中肯定包含error。error处理过程类似于C语言中的错误码,...

thinker 1489

php错误与异常处理方法

php与其他计算机编程语言在遇到错误就抛出异常不太一样,PHP在处理对象时它也有异常机制,但是PHP会尽可能的愉快的去执行而无视发生的事情,除非遇到一个极端严重错误才会抛出异常。本文主要给大家分享PHP相关的错误异常处理机制。 错误等级 PHP 有几个错误严重性等级。三个最常见的的信息类型是错误(error)、通知(notice)和警告(warning)。它们有不同的严重性: E_ERROR 、E...

weixin_44400506的博客 368

php的错误异常处理

php的错误异常机制 当我们没有自定义错误异常处理函数,php会按照默认的方式处理和显示错误异常。 自定义默认的错误异常处理函数 //注册捕获错误的处理函数 set_error_handler([__CLASS__, 'appError']); //注册捕获错误的处理函数 set_exception_handler([__CLASS__, 'appException']); //程序结束后...

littlexiaoshuishui的博客 543

Python 错误和异常处理全解析

本文深入探讨 Python 中错误和异常相关知识,详细介绍了语法错误、异常的概念、处理方式、触发方法、异常链、用户自定义异常、清理操作以及多个异常处理和异常注释等内容,并结合丰富示例帮助读者理解,旨在提升读者对 Python 错误和异常处理的认知与实践能力。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 648

深入浅出:PHP 错误和异常处理

通过函数,你可以设置自定义的错误处理器。这允许你以更灵活的方式处理不同类型的错误。php$errno// 你可以在这里记录错误日志或采取其他措施 } set_error_handler("customErrorHandler");// 触发一个警告错误 echo $undefined_variable;?$errstr// 你可以在这里记录错误日志或采取其他措施 } set_error_handler("customErrorHandler");

软件架构师笔记 1146

十二 通过异常处理错误

十二 通过异常处理错误 异常处理的任务就是将程序从错误的状态拯救出来,换一种方式继续运行程序 发现错误的理想时机当然是编译阶段-------程序运行之前。但是理想很丰满现实很骨感,在编译期间并不能找到所有的错误,可是存在问题总得解决而不是一味地带逃避。所以只有在发生错误的时候将错误源通过某种方式用适当的形式传递给接收者,让其知道如何处理这个问题。 使用异常能够降低错误处理代码的复杂度。如果...

VSelina的博客 323
上一篇: go中的结构体
下一篇: go中的并发
Cc_sec
博客等级 码龄8年 6粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值