异常知识点的总结

异常,知识点,总结 · 浏览次数 : 6

小编点评

**第一部分:异常及异常处理思考** 1. **什么是异常?** 异常是程序运行过程中出现无法正常执行代码的错误,并导致程序终止运行的过程。 **错误类型:** NameError、TypeError、ZeroDivisionError等 2. **如何通过程序的报错来找到有问题的代码?** 通过捕获异常,可以定位代码中的错误位置。 **第二部分:断言(assert)思考** 1. **如何在代码中强制要求一个条件满足?** 通过 `assert` 语句,可以在代码中强制要求一个条件满足。 **语法:** assert condition 2. **是否有专门的语法来完成?** `assert` 可以用于检查变量或表达式是否符合特定类型或条件。 **第三部分:练习01:自己构造一个报错的场景,并进行一个报错分析** ```python print(a) # NameError: name 'a' is not defined 0 # 这是程序执行完该代码的最后一行,但由于代码中有异常,所以该行代码不会执行 ``` **其他注意事项:** * 在捕获异常时,可以使用 `isinstance()` 函数检查异常的类型。 * 使用 `try` 和 `except` 语句可以有效地捕获和处理异常。 * 使用 `finally` 语句可以确保在异常处理之前关闭资源。

正文

第一部分:异常及异常处理

思考:

  1.什么是异常? python中有哪些异常?===》异常本身是类

print(a)  # NameError: name 'a' is not defined  错误类型 NameError
print(3+'a') # TypeError: unsupported operand type(s) for +: 'int' and 'str'
def f:
print(123) # SyntaxError: invalid syntax 语法错误

以上都是没有按照 python 规定写会报出异常
 NameError  # class NameError(Exception):
TypeError # class TypeError(Exception):
在控制台出现的异常都继承Exception

  2.如何通过程序的报错来找到有问题的代码?

 

例1:只有出现异常情况才会捕获(即执行except代码块)

try:
    # 可能会出现错误的代码,相应的进行处理
    # print(a)  # 出现异常才会捕获
    # print(1+1)  # 不会出现异常
    print(1+'a')
    # def f:  # 语法错误就不应该发生
    #     print(123)

except: # 捕获会出现的异常,并作出相应处理。如果无异常不会去捕获,出了异常捕获,但是语法错误无法捕获。
    print('服务器错误,稍后请重试!!!')

运行截图:

 例2:无异常不会去捕获

 例3:抛出异常信息

# 异常的几种情况
try:
    # 可能会出现错误的代码,相应的进行处理
    # print(a)  # 会出现异常才会捕获
    # print(1+1)  # 不会出现异常
    # print(1+'a')
    print(3/0)
    # def f:  # 语法错误就不应该发生
    #     print(123)
except NameError as e: # 制定名字异常

    print('服务器错误,稍后请重试!!!')
    a='123'
    print(e)  # name 'a' is not defined
except TypeError as e: # 制定类型异常
    print('类型错误')
    print(e)

# 可能还有其他错误的,不管什么错误都要捕获
except ZeroDivisionError as e:
    print(e)
    # raise e  # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息

except Exception:  # 不管什么异常都会捕获,大范围的捕获,这行代码放置在最后(其他制定异常之后)
    print('报错了')
# 如果try下面没有异常情况会会执行以下代码 ,如 print(1+1)
else:
    print('这里是else里面的代码')
# 不管try下面有没有异常都会触发以下代码
finally:
    print('这里是finally')

print(123)

运行截图:

 如果抛出异常信息:

except ZeroDivisionError as e:
    print(e)
    raise e  # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息

运行截图:

 例4:如果没有异常情况,会执行else语句代码块

try:
   print(1+1)  # 不会出现异常
except NameError as e: # 制定名字异常

    print('服务器错误,稍后请重试!!!')
    a='123'
    print(e)  # name 'a' is not defined
except TypeError as e: # 制定类型异常
    print('类型错误')
    print(e)

# 可能还有其他错误的,不管什么错误都要捕获
except ZeroDivisionError as e:
    print(e)
    raise e  # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息
print(123eee) # 上面抛出异常信息就不再执行这行代码了 except Exception: # 不管什么异常都会捕获,大范围的捕获,这行代码放置在最后(其他制定异常之后) print('报错了') # 如果try下面没有异常情况会会执行以下代码 ,如 print(1+1) else: print('这里是else里面的代码') # 不管try下面有没有异常都会触发以下代码 finally: print('这里是finally') print(123) # 如果前面有抛出异常信息就不会再执行后面的了

运行截图:  

 第二部分:断言(assert)

思考:

  1. 如何能在代码中强制要求 一个条件满足 ?

  2.是否有专门的语法来完成 ?

assert isinstance(5,str)  #  AssertionError
# assert isinstance(5,int)

运行截图:

assert 5==5
assert 5==4 # AssertionError

运行截图:

a=5
# assert isinstance(5,str)  #  AssertionError
# assert isinstance(5,int)
# assert 5==5
# assert 5==4 # AssertionError
assert isinstance(a,str),'a不是str类型(错误的提示)'
print(a)  # 前面有断言的话这行代码不再执行  

 运行截图:

第三部分:练习

01:自己构造一个报错的场景,并进行一个报错分析

报错的类型,报错的原因,报错的代码,和报错的行)

 

print(a) # NameError: name 'a' is not defined

 02:结合异常处理,确保打开文件后的正常关闭

用open直接打开一个文件,然后write进行写入,假设在写入的
时候可能会报错写段代码确保 报错的情况下依然可以把文件关闭掉。
try:

    f=open('file01.txt','w')
    f.write(123)
    f.close()   # 如果没有异常程序到这里就结束!
    # print(a)
    # print(123)
except Exception as e: # 报错的时候
    print(e) # write() argument must be str, not int

    # f.close()
finally:
    f.close()
    # print(f.read())  # 在这里不可以读取

运行截图:

 注意事项(如果try代码块异常程序就不再继续执行下面的代码了)

try:
    print(a)
    print(123)  # 如果上面一行代码出错就不再执行这行代码
except Exception as e:# 捕获异常
    print(e)
    print(456)

运行截图:

 

与异常知识点的总结相似的内容:

异常知识点的总结

第一部分:异常及异常处理 思考: 1.什么是异常? python中有哪些异常? 》异常本身是类 print(a) # NameError: name 'a' is not defined 错误类型 NameError print(3+'a') # TypeError: unsupported ope

记一次栈溢出异常问题的排查

刚修改的服务,推到开发环境之后,总是时不时的崩溃,但是不知道为什么。尝试找到他的最后一次调用,也没有复现。 没有办法,只能抓dump了。 开启崩溃自动dump,网络上很多,不赘述了。 拿到dump之后,首先看看是什么类型的异常 如图所示,是个栈溢出的异常。 打印一下堆栈,发现密密麻麻的全是这个代码。

关于Async、Await的一些知识点

在ASP.NET Core中,当一个HTTP请求到达服务器时,它会被分配给线程池中的一个线程来处理。该线程会执行相应的Controller方法。 如果这个方法是一个异步方法并且使用了await关键字,那么在await的代码执行完毕之前,这个线程会被释放回线程池,可以用来处理其他的HTTP请求。 当a

动态库链接和加载时的路径搜索优先级

目录前言动态库的链接动态库的加载 前言 在开发一个新项目时遇到了动态库加载异常的问题,因此在这里记录一下动态库的链接和加载过程中库路径的搜索优先级的相关知识。 动态库的链接 现在有一个main.o可重定位目标文件,其中需要用到开源库log4cpp。在链接的时候,我们可以这样链接: g++ main.

[转帖]那些你不知道的 TCP 冷门知识

最近在做数据库相关的事情,碰到了很多TCP相关的问题,新的场景新的挑战,有很多之前并没有掌握透彻的点,大大开了一把眼界,选了几个案例分享一下。 案例一:TCP中并不是所有的RST都有效 背景知识:在TCP协议中,包含RST标识位的包,用来异常的关闭连接。在TCP的设计中它是不可或缺的,发送RST段关

入侵检测系统综述文献研读

什么是入侵检测系统? 入侵检测就是从大量行为中找出异常部分,如果将其转化为深度学习知识,就是构建一个二分类器来识别异常和正常两种类别,但是因为网络入侵检测还需要相应的类别,因此二分类器不可以满足,所以要扩展到多分类器。 入侵检测系统的分类 现在有关入侵检测系统主要研究基于网络的入侵检测或基于异常的入

联邦学习:联邦异构知识图谱数据划分

在联邦场景下,C个知识图谱位于不同的客户端上。知识图谱拥的实体集合之间可能会存在重叠,而其关系集合和元组集合之间则不会重叠。我们联系一下现实场景看这是合理的,比如在不同客户端对应不同银行的情况下,由于不同银行都有着自己的业务流程,所以关系集合不重叠。本文我们来看具体在实验环节怎么去划分联邦异构知识图谱数据。

< Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!

全面深入地介绍 Python 的控制流程,包括条件语句、循环结构和异常处理等关键部分,尤其会将列表解析、生成器、装饰器等高级用法一网打尽。此外,我还将分享一些独特的见解和研究发现,希望能给你带来新的启发。文章的结尾,我们将有一个 "One More Thing" 环节,我会分享一个很特别但又很少人知道的有用的 Python 控制流程的技巧。

算法学习笔记(12): 线性基

# 线性基 > 熟练掌握异或运算是食用本文的大前提,请读者留意 [TOC] ## 是什么? 是一种利用线性代数的知识,用于解决异或问题的一种手段(不能算作数据结构吧这) > 本文并不会涉及到线性代数。而是从OI基础算法思想的角度阐释线性基。尽管这可能违背了设计该方法的初衷。 一般来说,预处理的时间复

[转帖]Oracle、MySQL、PG是如何处理数据库“半页写”的问题的?

数据库“断页”是个很有意思的话题,目前任何数据库应该都绕不过去。我们知道数据库的块大小一般是8k、16k、32k,而操作系统块大小是4k,那么在数据库刷内存中的数据页到磁盘上的时候,就有可能中途遭遇类似操作系统异常断电而导致数据页部分写的情况,进而造成数据块损坏,数据块损坏对于某些数据库是致命的,可