首页 > 其他分享 >异常知识点的总结

异常知识点的总结

时间:2023-09-14 15:25:13浏览次数:32  
标签:总结 知识点 代码 except 报错 print 异常 捕获

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

思考:

  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)

运行截图:

 

标签:总结,知识点,代码,except,报错,print,异常,捕获
From: https://www.cnblogs.com/xiaogan-520/p/17702573.html

相关文章

  • 公司某产品MySql分布式架构总结
    这个是目前公司某产品Server端MySql分布式架构总结(内容总结自wiki),该产品同时使用了Mysql和MongoDB。本篇Blog只做Mysql分布式架构的介绍。----------------------------------------------------一、共4台Linux服务器A\B\C\DAmasterwithslaveBC......
  • 关系数据库扩展知识总结
    最近在学习分布式数据库架构相关的知识(主要是Mysql),并对数据库扩展这部分知识整理总结了一下,希望对看到的人有所帮助,也希望读者能多提建议。-----------------------------------------------------------关系型数据库扩展的几个步骤:一、第一步:主从复制+读写分离......
  • Memcached深入学习总结
    在上一家公司时,产品主要使用memcached做缓存。虽然目前这家公司memcached使用的比较少(刚进公司做云存储相关服务时小规模使用了一下,后来做另一个系统时换redis做了缓存),但前几天整理资料时看到了原先写的memcached相关笔记,在此整理一下发上来。----------------------------------......
  • 代码随想录算法训练营第9天| ●28. 实现 strStr() ●459.重复的子字符串 ●字符串总结
    28.找出字符串中第一个匹配项的下标mydemo--(mythought)--(falied)classSolution{public:intstrStr(stringhaystack,stringneedle){for(inti=0;i<haystack.size();i++){if(haystack[i]!=needle[0])continue;......
  • SQL基础总结(一):关系模型
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。--------------------------------------------------------------- 规范化父子表图示:由父表画出主键画出箭头指向子表外键。满足第一范式的表:列包含原子值,没有重复的组。 当满足下列条件时第一范式的表自动满足第二范式的表:1.......
  • SQL基础总结(二):SQL基础
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。--------------------------------------------------------------- 标识符是可以在数据库对象(任何create语句所创建的内容)层次中明确的引用一个对象的名称。 标准的SQL区分保留关键字和非保留关键字。不可以用保留关键字作......
  • SQL基础总结(三):从表中检索数据
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。---------------------------------------------------------------使用DISTINCT消除重复的行。虽然空值是未知的,但彼此绝不相等,但DISTINCT认为空值是彼此相等的。对于DISTINCT操作,DBMS执行内部排序去识别并消除重复的行。排序......
  • SQL基础总结(四):操作符和函数
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------派生列是一个计算结果。派生列不会成为表中的永久列,他们用于显示或者报表目的。 包含空值的任何算数运算的......
  • SQL基础总结(六):联结
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------限定名称是一个表名后跟一个点号和表中的列名。限定名称可以在整个数据库中唯一的标识出某个列。如:table.colu......
  • SQL基础总结(七):子查询
    本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------不要在子查询中使用ORDERBY子句,子查询返回的中间结果是看不到的,对子查询排序没有意义。子查询是单个SELECT......