异常知识点的总结

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

思考:

  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)

运行截图:

 

posted @ 2023-09-14 15:11  人生努力努力努力就好  阅读(16)  评论(0编辑  收藏  举报