当前位置: 首页 > news >正文

Python(八)-异常

目录

什么是异常

快速入门异常

常见的异常类型

常见处理方式

捕获一个指定异常

捕获多个异常

捕获所有的异常

异常的其他关键字

异常具有传递性


什么是异常

异常指的是Python程序发生的不正常事件。

有时候,异常可称为错误。

当检测到一个错误时,Python解释器就无法继续执行,反而出现了一些错误的提示,这就是异常,也就是我们常说的BUG。

快速入门异常

当程序中遇到了异常时,通常程序会出现崩溃情况。

为了不让程序崩溃,就可以使用异常来快速处理。

try:
    可能发生异常的代码
except:
    如果出现异常时, 执行的代码

例如,一起来完成:

(1)定义一个列表变量;

(2)获取一个远超列表索引值的元素,报错:IndexError。

print("hello 1")
print("hello 2")j = 1/0 # 人为模拟一个异常 # ZeroDivisionError: division by zero

 解决方案

print("hello 1")
print("hello 2")try:j = 1 / 0  # 人为模拟一个异常 # ZeroDivisionError: division by zero
except:pass # 暂时没有想好怎么处理异常, 咱跳过

常见的异常类型

NameError、IndexError、KeyError、TypeError 、ZeroDivisionError等

# 1 使用未定义的变量
print(a) # NameError: name 'a' is not defined# 2 字符串下标越界异常
str = "abc"
print(str[0])
print(str[100]) # IndexError: string index out of range# 3 列表和元组 下标越界异常
list1 = [1, 2, 3]
print(list1[0])
print(list1[100]) # IndexError: list index out of rangetuple1 = (1, 2, 3)
print(tuple1[0])
print(tuple1[100]) # IndexError: tuple index out of range# 4 使用字典中没有的 key
dict1 = {"name" : "悟空","skill" : "七十二变"
}
print(dict1["name"])
print(dict1["age"]) # KeyError: 'age'# 5 分母为0
i = 10 / 0 # ZeroDivisionError: division by zero# 6 文件或目录 不存在
path = "./file2/hello.txt"
with open(path, "w") as f: # FileNotFoundError: [Errno 2] No such file or directory: './file2/hello.txt'print("开始 ... ...")# 7 类型异常
print("11" + 22) # TypeError: can only concatenate str (not "int") to str

常见处理方式

try:
    可能发生异常的代码
except:
    如果出现异常时, 执行的代码

print(111)try:j = 1 / 0
except:passprint(333333333)

捕获一个指定异常

try:
    可能发生异常的代码
except 异常类型名:
    当捕获到该异常类型时,执行的代码

print(111)try:j = 1 / 0
except ZeroDivisionError:passprint(333333333)

 捕获多个异常

try:
    可能发生异常的代码
except (异常类型1,类型2,...):
    如果捕获到该异常类型时,执行的代码

# 方式三 捕获多个异常
print("-------------------")try:j = 1 / 0str = "abc"print(str[100])except ZeroDivisionError:print("除法分母不得为零!")
except IndexError:print("下标越界异常!")print(333333333)# 方式四 捕获多个异常
print("---------------------")try:str = "abc"print(str[100])j = 1 / 0except (ZeroDivisionError, IndexError):print("报错!")print(333333333)# 方式四 捕获多个异常
print("-------------------")try:j = 1 / 0str = "abc"print(str[100])
except (ZeroDivisionError, IndexError) as err:print(f"报错: {err}")print(333333333)

捕获所有的异常

找第一个异常的问题,且Exception的首字母要大写。

try:
    可能发生异常的代码
except Exception[ as 变量]:
    当捕获到该异常类型时,执行的代码


# 案例1:找第一个  报错: division by zero
try:j = 1 / 0str = "abc"print(str[100])
except Exception as err:print(f"报错: {err}")
#
# print(333333333)print("------------------------------")# 案例二:找第一个  发生了异常信息...list index out of range
try:data = [1, 2, 3]print(data[100])dicts = {}print(dicts["name"])
except Exception as error:print(f"发生了异常信息...{error}")
print("hello world..")

异常的其他关键字

在捕获异常过程中,有两个关键字else、finally需要注意:

else:表示如果没有异常时,要执行的代码;
finally:表示的是无论是否有异常,都要执行的代码。

 当把else、finally都放入到捕获异常中,语法:

try:
    可能发生异常的代码
except 异常类型:
    当捕获到该异常类型时,执行的代码
else:
    没有异常信息时,执行的代码
finally:
    无论如何,都会执行的代码

# 1.制造异常
# 2.处理 指定异常
try:data = [1, 2, 3]print(data[100])# print(data[0])
except IndexError:print("====1====已发生异常信息!")
else: # 3.else:没有发生异常时,处理的事情print("没有发生异常时,才会执行代码!!")
finally:# 4.finally:文件必须关闭print("无论如何,都会执行finally!!")

 异常具有传递性

(1)定义两个函数test()、func();

(2)在一个函数中产生IndexError,同时在另一个函数中调用,观察效果。

# 1.func()
def func():print("==========A============")try:datas = [1,2,3]print(datas[100])except Exception:# 日志、埋点?    -->采集print("发生了异常信息...")   # 后台开发print("==========B============")# 2.test()
def test():print("********1***********")func()print("********2***********")# 3.调用test()
test()


http://www.mrgr.cn/news/42723.html

相关文章:

  • Mac ToDesk 无法连接网络
  • 某项目实战分析代码二
  • centos 7.9系统redis6.2.6哨兵模式部署
  • Ubuntu——双系统Ubuntu22.04系统安装和基础配置
  • JVM学习笔记
  • 每日一练:地下城游戏
  • 从零开始搭建UVM平台(九)-加入reference model
  • 将视频改成代码滚动
  • 最适合养老的Win 10 LTSC 2019精简版,老爷机的福音
  • C++ 语言特性20 - noexcept 关键字
  • python 实现djb2哈希算法
  • 8-2.Android 任务之 CountDownTimer 编码模板(开启计时器、取消计时器)
  • 【计算机网络】详解UDP协议格式特点缓冲区
  • 使用 Wireshark 抓取类似的 HTTP 请求包
  • 读书笔记_《组织行为学》
  • 8c语言基础文件
  • 补码加/减运算的具体示例
  • 《重生到现代之从零开始的C语言生活》—— 结构体和位段
  • python字典为什么至少需要哈希表的三分之一的行留空
  • linux常用的命令