Python与Go中详细的异常处理机制|面试题

news/2025/3/16 23:28:34/

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
😊 座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

异常处理机制主要是用于捕获和处理程序运行过程中可能发生的错误和异常情况,通过使用异常处理,可以优雅地处理错误,并采取适当的措施,而不是让程序崩溃。

Python 异常处理机制

以下是Python中常见的异常处理技术和关键字:

  1. try-except语句:使用 try-except 语句可以捕获并处理可能引发的异常。在 try 块中编写可能引发异常的代码,然后在相应的 except 块中处理异常。例如:

    try:# 可能引发异常的代码result = 10 / 0
    except ZeroDivisionError:# 处理 ZeroDivisionError 异常print("除数不能为零")
    
  2. 多个 except 块:您可以使用多个 except 块来处理不同类型的异常。这样,根据引发的具体异常类型,可以执行相应的处理逻辑。例如:

    try:# 可能引发异常的代码result = 10 / 0
    except ZeroDivisionError:# 处理 ZeroDivisionError 异常print("除数不能为零")
    except ValueError:# 处理 ValueError 异常print("无效的值")
    
  3. else 块:可以在 try-except 语句中添加 else 块,在没有引发异常时执行特定的代码块。例如:

    try:# 可能引发异常的代码result = 10 / 2
    except ZeroDivisionError:# 处理 ZeroDivisionError 异常print("除数不能为零")
    else:# 在没有异常时执行的代码print("计算结果为:", result)
    
  4. finally块:使用finally块可以确保无论是否发生异常,都会执行特定的代码块。无论是否引发异常,finally块中的代码都将被执行。例如:

    try:# 可能引发异常的代码result = 10 / 2
    except ZeroDivisionError:# 处理 ZeroDivisionError 异常print("除数不能为零")
    finally:# 无论是否发生异常,都会执行的代码print("处理完成")
    
  5. 异常类型捕获:在 except 块中,可以指定捕获特定类型的异常,并将其赋给一个变量,以便进一步处理或获取异常信息。例如:

    try:# 可能引发异常的代码result = int("abc")
    except ValueError as e:# 处理 ValueError 异常,并获取异常信息print("发生异常:", str(e))
    

Go 异常处理机制

Go语言中的异常处理机制与其他一些编程语言有所不同。Go语言鼓励使用错误值(Error Value)来处理异常情况,而不是使用传统的异常机制。

在Go中,错误值是一种特殊的类型,用于表示函数执行过程中可能出现的错误情况。函数可以返回一个错误值,以指示发生了某种异常或错误。通常,错误值的类型是error,它是一个内置的接口类型。

以下是Go语言中处理异常的常见模式和技术:

  1. 函数返回错误值:函数可以通过返回一个错误值来指示发生了异常情况。通常,函数的最后一个返回值是一个错误类型。如果函数成功执行,则错误值为nil,否则会返回一个非nil的错误值。使用函数返回的错误值,调用者可以检查错误并采取适当的处理措施。

    func doSomething() error {// ...if err != nil {return err // 返回错误值}// ...return nil // 返回 nil 表示没有错误
    }
    
  2. 错误检查:调用者可以通过对错误值进行检查来判断函数是否返回了错误。使用if语句或者:=短变量声明来检查错误值,并根据需要处理错误。

    if err := doSomething(); err != nil {// 处理错误
    }
    
  3. 自定义错误类型:在Go中,您还可以自定义错误类型来提供更丰富的错误信息和上下文。通过实现error接口的Error()方法,您可以为错误类型提供自定义的错误消息。

    type MyError struct {message string
    }func (e MyError) Error() string {return e.message
    }func doSomething() error {if somethingWrong {return MyError{"Something went wrong"}}return nil
    }
    
  4. panic和recover:Go语言提供了panicrecover关键字用于处理严重的错误情况。panic用于引发一个运行时异常,而recover用于捕获并恢复这个异常。但是,panicrecover通常被认为是一种应对极端情况的手段,不应该被滥用,因为它们破坏了函数的正常执行流程。

    func doSomething() {if somethingWrong {panic("Something went wrong")}
    }func main() {defer func() {if r := recover(); r != nil {fmt.Println("Recovered:", r)}}()doSomething()
    }
    

    以上就是 Python与Go中的异常处理机制的全部内容。


http://www.ppmy.cn/news/1340698.html

相关文章

关于java的异常

关于java的异常 我们在上一篇文章中,了解了java的内部类,内部类的用法等,本篇文章中,我们去了解一下java中的异常,这也是非常关键的一个知识😀 一、什么是异常 比如我们平时去上班,按时去坐地…

协作办公开源神器:ONLYOFFICE

目录 前言ONLYOFFICE为什么选择ONLYOFFICE强大的文档编辑功能多种协作方式多人在线协同支持跨端多平台连接器安全性极高本地部署 ONLYOFFICE 8.0版本震撼来袭可填写的 PDF 表单显示协作用户头像更新插件界面设计更快更强大 总结 前言 近几年来,随着互联网技术的不断…

自学PyQt6杂记索引

文章目录 📖 介绍 📖🏡 安装 🏡📒 使用 📒📝 QtCore📝 QtGui📝 QtWidgets📝 QToolTip📝 信号和槽📝 QtDBus📝 QtNetwork📝 QtHelp📝 QtXml📝 QtSvg

virtualBox虚拟机安装ubuntu后的必要配置

1. 使能双向copy 粘贴功能。在device menu的 shared clipboard项, 选bidirectional. 2.启用共享文件夹。 在device 菜单的 shared folder 项配置, (对于日期乱码问题和命令行打不开的问题请见ubuntu18.04安装后时间日期乱码及terminal打不开解决方法_电脑日期变成…

-代码分享-

快速排序 int Qsortkey1(int a[], int left, int right) { //挖坑法 int begin left, end right; //三数取中 int tmp san(a, left, right); Swap(&a[tmp], &a[begin]);int key a[begin]; int keyi begin; int pivot begin;while (begin < end) {//向左找小w…

【Vue3+Vite】路由机制router 快速学习 第四期

文章目录 路由简介路由是什么路由的作用 一、路由入门案例1. 创建项目 导入路由依赖2. 准备页面和组件3. 准备路由配置4. main.js引入router配置 二、路由重定向三、编程式路由(useRouter)四、路由传参(useRoute)五、路由守卫总结 路由简介 路由是什么 路由就是根据不同的 URL…

unity打开外部exe,并将其置顶

直接上代码&#xff1a; 调用代码 ProcessStartInfo startinfo1 new ProcessStartInfo(); startinfo1.FileName "E:\\fastdds\\run\\" PlanType ".exe"; startinfo1.Arguments winInfo; pss Process.Start(startinfo1);//做延时的原因是window打开…

Next.js初识

Next.js初识 Next.js&#xff1a;这是一个用于生产环境的React 框架&#xff08;国外用的比较多&#xff09;。 Next.js 为您提供生产环境所需的所有功能以及最佳的开发体验&#xff1a;包括静态及服务器端融合渲染、 支持 TypeScript、智能化打包、 路由预取等功能 无需任何配…