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

😄作者简介: 小曾同学.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.mzph.cn/news/663977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django+flask+python高校教材管理系统47nia

本.4论文结构 绪论:剖析项目可行性,表明研究方向。 开发技术:系统关键运用了Python技术性、Django框架、B/S架构和myspl数据库查询,并进行了详细介绍[6]。 系统分析:包含系统的总体构造,用例图和结构图。 系…

故障诊断 | 一文解决,CNN-LSTM卷积神经网络-长短期记忆神经网络组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,CNN-LSTM卷积神经网络-长短期记忆神经网络组合模型的故障诊断(Matlab) 模型描述 CNN-LSTM模型是一种结合了卷积神经网络(Convolutional Neural Network)和长短期记忆神经网络(Long Short-Term Memory)的组合模型,常用于数据故障…

SpringBoot使用Kafka详解含完整代码

1. 前言 随着大数据和实时处理需求的增长,Kafka作为一种分布式流处理平台,与Spring Boot的集成变得尤为重要。本文将详细探讨如何在Spring Boot应用程序中设置和使用Kafka,从基础概念到高级特性,通过实际代码示例帮助读者深入理解…

大语言模型的未来进化路径及其影响

随着人工智能技术的飞速发展,大语言模型已成为智能时代的重要标志之一。从早期基于规则和统计学习的语言模型,到如今基于深度学习框架下的Transformer架构,如GPT系列、BERT等,大语言模型已经在自然语言处理领域取得了前所未有的突…

uniapp中封装一个svg转base64的组件

uniapp中由于不支持svg--》base64,同时无法使用h5中atob,这里我们采用js-base64插件实现这样一个组件,只要传人svg的代码即可在uniapp中转为base64,同时支持自定义参数,比如宽度,高度,等 1 安装 npm inst…

《动手学深度学习(PyTorch版)》笔记6.3

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过&…

Python实现PDF到HTML的转换

PDF文件是共享和分发文档的常用选择,但提取和再利用PDF文件中的内容可能会非常麻烦。而利用Python将PDF文件转换为HTML是解决此问题的理想方案之一,这样做可以增强文档可访问性,使文档可搜索,同时增强文档在不同场景中的实用性。此…

【FPGA原型验证】附录基础知识:FPGA/CPLD基本结构与实现原理

聚焦Xilinx ISE 介绍Xilinx公司及其产品的基本情况,并在此基础上描述了CPLD和FPGA的内部结构及基本原理。 1.1 Xilinx公司及其产品介绍 总部设在加利福尼亚圣何塞市(San Jose)的Xilinx是全球领先的可编程逻辑解决方案的供应商,图1-1为公司标志。 Xilinx公司的业务是研发…

后端——go系统学习笔记(不断更新中......)

数组 固定大小 初始化 arr1 : [3]int{1, 2, 3} arr2 : [...]int{1, 2, 3} var arr3 []int var arr4 [4]int切片 长度是动态的 初始化 arr[0:3] slice : []int{1,2,3} slice : make([]int, 10)len和cap len是获取切片、数组、字符串的长度——元素的个数cap是获取切片的容量—…

Android PMS——ADB命令安装流程(七)

前面的文章我们介绍了系统应用解析流程和通过 PackageInstaller.apk安装应用程序的相关流程,这一篇我们来分析使用 ADB 命令来实现 APK 安装流程。 一、ADB安装命令 ADB命令使用 adb install [选项] [APK绝对路径] 常见选项如下: -r:覆盖安装,保存原有数据; -t:…

深度学习入门笔记(七)卷积神经网络CNN

我们先来总结一下人类识别物体的方法: 定位。这一步对于人眼来说是一个很自然的过程,因为当你去识别图标的时候,你就已经把你的目光放在了图标上。虽然这个行为不是很难,但是很重要。看线条。有没有文字,形状是方的圆的,还是长的短的等等。看细节。纹理、颜色、方向等。卷…

Java正则表达式之Pattern和Matcher

目录 前言一、Pattern和Matcher的简单使用二、Pattern详解2.1 Pattern 常用方法2.1.1 compile(String regex)2.1.2 matches(String regex, CharSequence input)2.1.3 split(CharSequence input)2.1.4 pattern()2.1.5 matcher(CharSequence input) 三、Matcher详解3.1 Matcher 常…

JSP和JSTL板块:第三节 JSP四大域对象 来自【汤米尼克的JAVAEE全套教程专栏】

JSP和JSTL板块:第三节 JSP四大域对象 一、page范围二、request范围三、session范围四、application范围 在服务器和客户端之间、各个网页之间、哪怕同一个网页之内,总是需要传递各种参数值,这时JSP的内置对象就是传递这些参数的载具。内置对象…

Redis面试题38

人工智能在医疗领域有哪些应用? 答:人工智能在医疗领域有许多应用,下面是一些常见的例子: 图像识别和辅助诊断:人工智能可以用于图像识别和辅助诊断,例如在医学影像领域,人工智能可以辅助医生分…

​(四)hive的搭建2

在&#xff08;三&#xff09;hive的搭建1中我们搭建好了hive环境&#xff0c;但是只能本地访问&#xff0c;在本节中配置Hive的访问方式。 1.元数据服务的方式 1.1 编辑hive-site.xml sudo vi hive-site.xml 在文件最后增加以下内容 <!– 指定存储元数据要连接的地址 –…

WebGL 1.0 内置函数

前言 本篇文章介绍WebGL 1.0 shader中支持的内置函数 角度弧度转化 角度转弧度radians 计算公式&#xff1a; R π d e g r e e 180 R \pi \times degree \div 180 Rπdegree180 float radians(float degree) vec2 radians(vec2 degree) vec3 radians(vec3 degree)…

无里程计下的纯跟踪算法实现

文章目录 概要生成相机坐标系下的三维坐标无里程计下的纯跟踪算法实现 概要 当你只有一个相机的时候&#xff0c;想要快速实现机器人跟随功能&#xff0c;没有里程计的情况下&#xff0c;就可以看这里了。这篇博文实现了一个无里程计下的纯跟踪算法。 生成相机坐标系下的三维…

1、安全开发-Python爬虫EDUSRC目标FOFA资产Web爬虫解析库

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正 前言&#xff1a; 主要包含对requests库和Web爬虫解析库的使用&#xff0c;python爬虫自动化&#xff0c;批量信息收集 Python开发工具&#xff1a;PyCharm 2022.1 激活破解码_安装教程 (2022年8月25日…

For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

环境&#xff1a; wsl ubuntu22.04 vits2 问题描述&#xff1a; RuntimeError: CUDA error: unknown error [rank0]: CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. [rank0]: For debugging …

【Android新版本兼容】startActivityForResult()方法被弃用的解决方案

提示&#xff1a;此文章仅作为本人记录日常学习使用&#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、使用registerForActivityResult()方法 一、使用registerForActivityResult()方法 startActivityForResult()方法在appcompat库1.3.0或更高版本中被废弃了&…