首页 > 其他分享 >异常基础

异常基础

时间:2023-07-21 22:45:28浏览次数:40  
标签:division 代码 基础 except try print 异常

1. 什么是异常

跟java异常(Exception)一样,都是指在程序执行过程中发生的错误或异常情况。当程序出现异常时,会中断正常的执行流程,并转而执行异常处理的逻辑。

2. 什么情况下触发异常

异常可以由多种原因引起,例如:

  • 语法错误:代码不符合Python语法规则。
  • 运行时错误:在代码执行期间发生了错误,如除零错误、索引错误等。
  • 逻辑错误:程序逻辑错误导致了异常情况,如值错误、类型错误等。

当遇到异常时,Python会抛出相应的异常对象。

这些异常对象属于异常类的实例,它们包含有关异常的相关信息,如异常类型和错误消息。

通过捕获和处理这些异常,我们可以更好地控制程序的流程,并提供适当的错误处理机制。

3. 异常的处理

异常处理通常使用try-except语句来实现。在try块中,放置可能引发异常的代码;在except块中,指定要处理的异常类型,并提供相应的处理逻辑。如果没有匹配的except块,异常将被传递给上层调用栈,直到找到匹配的异常处理器或程序终止。

try:
    # 可能会引发异常的代码
    result = 10 / 0  # 除以零会引发 ZeroDivisionError 异常
    print("这行代码不会被执行")
except ZeroDivisionError:
    # 处理 ZeroDivisionError 异常
    print("除零错误发生")
print("异常捕获,处理完成后继续执行")

# 输出:
# 除零错误发生
# 异常捕获,处理完成后继续执行

4. 异常处理程序-try-except

4.1 一个除数为0的错误

 1 def division(x, y):
 2     return x / y
 3 
 4 
 5 print(division(8, 6))  # 1.3333333333333333
 6 '''
 7 Traceback (most recent call last):
 8   File "F:\python\base\base\037异常\异常01-一个除数为0的错误.py", line 6, in <module>
 9     print(division(5, 0))
10           ^^^^^^^^^^^^^^
11   File "F:\python\base\base\037异常\异常01-一个除数为0的错误.py", line 2, in division
12     return x / y
13            ~~^~~
14 ZeroDivisionError: division by zer
15 '''
16 print(division(5, 0))  # 报错
17 
18 print(division(6, 3))  # 报错后,程序终止,此句未执行

当一个程序发生了异常,程序就会将异常传递给上层调用栈,直到找到匹配的异常处理器或程序终止。如果没有处理线程或程序将会终止。

4.2 语法

1 try:
2     # 可能会引发异常的代码块
3     # ...
4 except 异常类:  # 如果没有异常类,则捕获所有异常
5     # 异常处理代码
 1 def division(x, y):
 2     try:
 3         return x / y
 4     except ZeroDivisionError:
 5         print("除数不可为0")
 6 
 7 
 8 print(division(8, 6))  # 1.3333333333333333
 9 print(division(5, 0))  # 报错被捕获,但函数还是有返回值,为None
10 
11 print(division(6, 3))  # 异常被捕获处理,程序没有终止,因此此句执行了.输出:2.0

5. 异常处理-try-except-else

5.1 语法

1 try:
2     # 可能会引发异常的代码块
3     # ...
4 except ExceptionType1:   # 如果没有异常类,捕获所有的异常
5     # 处理 ExceptionType1 类型的异常的代码
6     # ...
7 else:
8     # 在没有引发异常时执行的代码块
def division(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("除数不可为0")
    else:  # 程序无异常,返回结果
        print("程序无异常发生")
        return result


print(division(8, 6))  # 1.3333333333333333
print(division(5, 0))  # 报错被捕获,但函数还是有返回值,为None

print(division(6, 3))  # 异常被捕获处理,程序没有终止,因此此句执行了.输出:2.0

'''
输出:
    1.3333333333333333
    除数不可为0
    None
    程序无异常发生
    2.0
'''

else块(可选):在try块中的代码没有引发任何异常时执行的代码块。

else语句场景:

  1. 需要处理异常以外的代码逻辑:else块中的代码会在try块中的代码没有引发任何异常时执行。这样可以将正常的代码逻辑放在else块中,而将异常处理逻辑放在except块中,使代码更加清晰和可读。

  2.  异常处理与成功处理分离:else块中的代码只会在没有异常发生时执行,因此可以将对于异常情况的处理与正常情况的处理分离开来,提高代码的可读性和可维护性。

 

标签:division,代码,基础,except,try,print,异常
From: https://www.cnblogs.com/allenxx/p/17572528.html

相关文章

  • css基础-float浮动
    什么是浮动创建浮动框,将其移动左或者右边,直到碰到左边缘或右边缘。特性:浮动元素会脱离标准流,浮动的盒子不会保留白原来位置一行内显示,顶端对齐行内元素加了浮动元素都会具有行内块元素,无需转换,可以设置高度和宽度。为什么要用浮动网页布局本质就是摆盒子,传统网页布局方式:a)通过......
  • Python基础day50
    RegExp对象//在JS中使用正则表达式,在js中如何使用正则呢?//定义正则表达式两种方式varreg1=newRegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");//第一种定义方式varreg2=/^[a-zA-Z][a-zA-Z0-9]{5,11}///第二种定义方式//正则校验数据varres=reg2.test('jason666......
  • 博弈论基础捏
    博弈论基础一、四大博弈模型1、巴什博奕定义:一堆n个物品,两个人轮流从中取出不多于m个,最后取光者胜,不能继续取的人输;结论:若n%(m+1)!=0,则先手必胜,反之先手必输2、尼姆博弈定义:n堆物品,每堆物品的个数任意,两人轮流取,每次取某堆中不少于1个,最后取完者必胜。结论:将每堆物品的数量......
  • linux基础之守护进程
    一.守护进程(Daemon)1.关于守护进程守护进程,顾名思义,也就是专门守护一个进程的进程。守护进程的职责就是专门确保被指定的进程的运行。守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端,并且周期性的执行某种任务或等待处理某些发生的事件。守护进程是一种......
  • Java异常
    Java异常什么是异常实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序再跑着,内存或硬盘可能满了。等等。软件程序在运......
  • Python基础day01
    1.编码1.1计算机中所有的数据本质上由0和1来存储。注意:以什么编码保存就以什么编码打开否则会乱码。1.2pycharm运行地址:前面:python解释器地址后面:py文件地址 默认python解释器以'utf-8'编码打开文件。2.输入#将结果呈现给客户,print会在尾部加换行符print("xxx")#en......
  • 学习生理基础 | 记忆的四个环节1——识记 | 2023年7月21日
    小虾米原创作品,转载请注明出处:https://www.cnblogs.com/shrimp-can/p/17570988.html 我们都想高效学习,但如何实现呢?网络上充斥着各种记忆、学习的技巧,能给予我们很大的帮助。但我始终认为,要做好一件事,须得“顺势而为”。那对于学习,什么是这个“势”呢?我认为便是人学习的生理......
  • VUE|组件基础
    1快速体验步聚定义组件导入组件引用组件语法<template>模板</template><scriptsetup>//逻辑</script><style>/*样式*/</style>1)定义组件在components目录下,创建组件文件TheCounter.vue<template><!--组件的模板部分-->计数器:{{c......
  • 频谱仪基础(二)--- 超外差频谱分析仪实现
    在上一篇文章中,已经对频谱仪的基本原理进行了阐述。在下面的一节中,给出基于超外差原理的频谱分析仪的组件,并且已9kHz~3GHz/7GHz频谱仪设计构架作为现代频谱分析仪的实际实现分析。频谱仪是一个由各个重要的组件构成复杂的系统,包括RF、IF、低频、数据采集和处理显示部分,同时包括必......
  • 频谱仪基础(一)--- 频谱仪的架构
    前言无线电通信中最常见的测量任务之一是测试信号的频域特性。因此频谱分析仪作为更广泛和更宽的RF测量工具,其覆盖频率范围高达40GHz及以上,频谱分析测量,几乎可以用于所有无线应用开发、生产、安装和有线通信维护工作。随着移动通信的发展,一些主要关键指标,例如显示的平均噪声电......