异常知识点的总结

异常,知识点,总结 · 浏览次数 : 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

js 关于 replace 取值、替换第几个匹配项(两种方式:正则、普通字符串操作)

在日常开发中,经常遇到针对字符串的替换、截取,知识点比较碎容易混淆,特此总结一下,仅供参考。

如何优雅的写 css 代码

CSS(全称 Cascading Style Sheets,层叠样式表)为开发人员提供声明式的样式语言,是前端必备的技能之一,基于互联网上全面的资料和简单易懂的语法,CSS 非常易于学习,但其知识点广泛且分散,很难做到精通,在我们日常开发中,常常忽视了 CSS 代码的质量,很容易写出杂乱无章的 CS

Redis持久化机制 RDB、AOF、混合持久化详解!如何选择?

> 本文已经收录进 [JavaGuide](https://javaguide.cn/)(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。) Redis 持久化机制属于后端面试超高频的面试知识点,老生常谈了,需要重点花时间掌握。即使不是准备面试,日常开发也是需要经常用

异常过滤器—MVC中异常过滤器使用

## 一、什么是异常过滤器? 异常过滤器(**Exception Filters**)是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策

异常:no transaction is in progress

转载请注明出处: 在使用 @Scheduled 注解创建了一个定时任务,并通过定时任务不断向mysql写入数据,写入数据的方式是通过 jpa 的方式,在代码运行的过程中出现错误:no transaction is in progress。 以下是异常堆栈: 原因分析: 该异常表明没有事务正在进行,导

8.8 异常处理机制反调试

通常可以通过在程序中设置异常处理函数,并在其中发起一个异常,然后判断程序是否已经被调试器附加来实现反调试。如果异常处理函数没有被触发,则说明程序已经被调试器附加;如果异常处理函数被触发,则说明程序没有被调试器附加。安装异常处理函数并手动触发,此时如果被调试器附加,则会不走异常处理流程,此时`IsDebug`将会返回默认的`False`,并直接走`_asm call pBuff;`在调试器不忽略`i

C#学习笔记---异常捕获和变量

异常捕获 使用异常捕获可以捕获出现异常的代码块,防止因为异常抛出造成的程序卡死的情况发生。 try{}catch{}finally{}结构 //异常捕获 try { string str=Console.ReadLine(); int i=int.Parse(str); Console.WriteL

C++ 异常处理机制详解:轻松掌握异常处理技巧

C++ 异常处理 C++ 异常处理机制允许程序在运行时处理错误或意外情况。它提供了捕获和处理错误的一种结构化方式,使程序更加健壮和可靠。 异常处理的基本概念: 异常: 程序在运行时发生的错误或意外情况。 抛出异常: 使用 throw 关键字将异常传递给调用堆栈。 捕获异常: 使用 try-catch

java基础 韩顺平老师的 异常 自己记的部分笔记

443,异常处理入门 package com.hspedu.exception_; public class Exception { public static void main(String[] args) { int num1 = 10; int num2 = 0; //老韩解读 //1,nu