python中监控错误的语句_python学习笔记_第17天(异常和错误)

异常机制

没有异常机制的两个坏处:

逻辑代码和错误处理代码放一起,结构混乱

程序员本身需要考虑的例外情况较复杂,对程序员本身要求较高

在没有异常机制的情况下的伪代码:

#将d:/a.txt 拷贝到e:盘

if "d:/a.txt"这个文件存在:

if e 盘的空间大于a.txt 文件长度:

if 文件复制一半IO 流断掉:

停止copy,输出:IO 流出问题!

else:

copyFile("d:/a.txt","e:/a.txt") # 核心功能代码

else:

print("e 盘空间不够存放a.txt!")

else:

print("a.txt 不存在!")

python异常机制的情况下的伪代码:

#将d:/a.txt 拷贝到e:盘

try:

copyFile("d:/a.txt","e:/a.txt")

except:

print("文件无法拷贝")

异常机制本质

异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。

所谓异常处理,就是指程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。

python 中,引进了很多用来描述和处理异常的类(KeyBoardInterrupt – ctrl+c 键盘中断,Exception – 异常,SystemExit – 系统异常,GeneratorExit – 生成器异常),称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。下面较为完整的展示了

python 中内建异常类的继承层次:

b3b26e8cb987b94ed0bc2b3b597402f0.png

异常处理过程

python 中一切都是对象,异常也采用对象的方式来处理。处理过程:

抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。

捕获异常:解释器得到该异常后,寻找相应的代码来处理该异常。

解决异常问题的态度

碰到每个异常,都要花心思去解决而不要动不动张口问人。通过自己的努力无法解决,再去找寻求帮助。

解决每一个遇到的异常,建议遵循如下三点:

不慌张,细看信息,定位错误。看清楚报的错误信息,并定位发生错误的地方。

百度并查看相关帖子。将异常类信息进行百度,借鉴他人案例中的解决方案,获取处理经验。

查看十多个相似案例仍无解可寻求帮助。

自主解决 30 个以上的错误,就能积累初步的调试经验,以后遇到的大部分错误都能独立完成。

定位异常

当发生异常时,解释器会报相关的错误信息,并会在控制台打印出相关错误信息。按照从上到下的顺序即可追溯(Trackback)错误发生的过程,最终定位引起错误的那一行代码。

try…except…

try…一个except 结构

try…except 是最常见的异常处理结构。结构如下:

try:

被监控的可能引发异常的语句块

except BaseException [as e]:

异常处理语句块

try 语句块包含可能引发异常的代码,except 语句块则用来捕捉和处理发生的异常。

执行的时候,如果try 语句块中没有引发异常,则跳过ecept 语句块继续执行后续代码;如果try 语句块中发生了异常,则跳过try 语句块中的后续代码,跳到相应的except 语句块中处理异常;异常处理完后,继续执行后续代码。

遇到异常的执行顺序

try:

print("step1")

a = 3 / 0 # 除0报错

print("step2") # 当上方代码出现错误时,不执行

except BaseException as e: # BaseException所有异常的父类,as将异常详情赋值给e

print("step3") # try模块有代码报错时转入执行except模块

print(e)

print(type(e))

print("step4")

执行结果:

step1

step3

division by zero

step4

程序执行到引发异常的语句时,直接掉到except 异常处理语句块进行处理;处理完毕后,继续执行下面的程序。

无异常的执行顺序

try:

print("step1")

a = 3 / 2

print("step2")

except BaseException as e:

print("step3")

print(e)

print("step4")

执行结果:

step1

step2

step4

程序执行没有发生异常,则正常执行完try 块后跳过except 异常处理语句块,继续往下执行。

# 循环输入数字,如果不是数字则处理异常;直到输入88,则结束循环。

while True:

try:

x = int(input("请输入一个数字:"))

print("您入的数字是", x)

if x == 88:

print("退出程序")

break

except: # [except 异常类 as 变量]可以打印变量,展示错误原因

print("异常:输入的不是一个数字")

try…多个except 结构

BaseException类是所有异常的父类,可以捕获所有的异常,工作中最常见。但从经典理论考虑,一般建议尽量捕获可能出现的多个异常(按照先子类后父类的顺序),并且针对性的写出异常处理代码。为了避免遗漏可能出现的异常,可以在最后增加BaseException。结构如下:

try:

被监控的、可能引发异常的语句块

except Exception1:

处理Exception1 的语句块

except Exception2:

处理Exception2 的语句块

...

except BaseException:

处理可能遗漏的异常的语句块

try:

a = input("请输入被除数:")

b = input("请输入除数:")

c = float(a)/float(b)

print(c)

except ZeroDivisionError: # 右键--Show Diagiams,可查看异常类的层级结构

print("异常:除数不能为0")

except TypeError: # 保证子类在前,否则父类在子类前时,python顺序调用,子类不会被调用

print("异常:除数和被除数都应该为数值类型")

except NameError:

print("异常:变量不存在")

except BaseException as e:

print(e)

print(type(e))

标签:语句,17,python,except,笔记,try,print,txt,异常

来源: https://blog.csdn.net/weixin_44454872/article/details/113574541

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python异常是指程序运行过程出现的错误异常情况,例如除以0、索引超出范围等。为了避免程序因异常而崩溃,我们可以使用异常处理机制来捕捉并处理这些异常Python异常处理语句有两种:try-except语句和try-finally语句。其try-except语句用于捕捉和处理异常,try-finally语句用于在无论异常是否发生时都要执行的代码。 try-except语句的基本语法如下: ``` python try: # 可能会出现异常的代码块 except Exception1: # 处理 Exception1 异常的代码块 except Exception2: # 处理 Exception2 异常的代码块 else: # 没有异常时会执行的代码块 finally: # 无论是否有异常都会执行的代码块 ``` 在try语句放置可能会抛出异常的代码,如果出现异常,则会跳到相应的except语句处理异常。如果没有异常,则会执行else语句的代码。finally语句的代码无论异常是否发生,都会执行。 例如,以下代码用try-except语句处理了除以0的异常: ``` python try: a = 1 / 0 except ZeroDivisionError: print("除数不能为0") ``` try-finally语句的基本语法如下: ``` python try: # 可能会出现异常的代码块 finally: # 无论是否有异常都会执行的代码块 ``` 在try语句放置可能会抛出异常的代码,无论是否出现异常,finally语句的代码都会执行。 例如,以下代码用try-finally语句关闭了文件: ``` python try: f = open("file.txt", "r") print(f.read()) finally: f.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值