第九章 Python-异常处理

第九章 Python-异常处理

9.1 异常定义

  • 异常就是程序报错信息,在程序运行的过程当中,如果出现了错误,则会抛出异常。

  • 场景的异常信息有很多,例如:

Traceback (most recent call last):
  File "D:\PycharmProjects\PythonProject\test.py", line 13, in <module>
    name
NameError: name 'name' is not defined
  • 一段完整的异常信息主要包含三个部分
    • Traceback(most recent call last):异常的追踪信息,表示在哪个文件的具体的哪一行发生了错误。
    • NameError:异常的类型
    • name ‘name’ is not defined:异常的具体信息。

9.2 作用

  • 增强程序的稳定性:随着异常的抛出,程序会终止执行,那么为了避免这种情况,我们需要通过异常处理来是程序的稳定性变得更强
  • 异常本身是一种资源,可以帮助我们更加了解自己错在哪里,通过分析异常的内容,也可以帮助我们更加合理的设计程序。

9.3 处理方式

9.3.1 异常形成

1. 语法上的错误
  • 语句必须要遵循语法,否则必然无法实现想要的功能。
2. 逻辑上的错误
  • 可以预知的错误
    • 用户输入一个IP地址,然后判断该IP地址 属于哪一类IP地址
# x.x.x.x .分割-->list  len(list) !=4 提示用户输入格式错误
# x是数字,isdecimal 提示用户x必须是数字
# 0-255  x-->int  判断范围是否在0-255,提示用户x的 方位在0-255之间
  • 不可预知的错误
from telnetlib import Telnet

try:  # 假设不会出错,尝试执行以下语句,如果出现了特定错误,按照Except语句执行
    tn = Telnet("192.168.0.1")  # 此时相当于向 192.168.0.1 发起telnet连接,正常情况下没有问题,但是如果网络出现故障,以及服务器出现故障,那么此时连接就会失败。
except TimeoutError:
    print("Timeout Error")

9.3.2 异常处理基本语法结构

  • 异常处理的语法结构
try:
    # 可能出现异常的代码
    # 这里的代码可能会有很多行,如果在某一行出现了错误,则程序会立刻抛出异常,统计代码不会继续执行
except 异常类型1 as e:  # e代表异常的具体内容
    # 捕捉到异常类型1之后做出的处理
except 异常类型2 as e:
    # 捕捉到异常类型2之后做出的处理
else:
    # 如果没有抛出任何异常,则会执行else下的代码块
finally:
    # 如论是否抛出了异常,都会执行finally下的代码块
  • 实例一:
def func():
    print("Hello World")
    yield "------"
    print("2")
    yield "------"
    print(3)
    yield 
    print(4)
    print(5)

g = func()
while True:
    try:
        print(next(g))
    except StopIteration:
        print("StopIteration")
        break

显示结果如下:

Hello World
------
2
------
3
------
4
5
StopIteration

9.4 自定义异常和主动抛出异常

  • 自定义异常:
try:
    name
    data_list = [1, 2, 3]
    data_list[3]
    data_dict = {'a': 1, 'b': 2, 'c': 3}
    data_dict['d']
except Exception:  # Exception可以匹配所有的异常,该条匹配,不匹配后续处理方式
    print("错误")
except NameError:
    print("NameError")
except IndexError:
    print("IndexError")
except KeyError:
    print("KeyError")
  • 主动抛出异常:
class LoginError(Exception):  # 所有的异常都可以通过Exception表示
    def __init__(self, ip): self.ip = ip
    def __str__(self): return f"{self.ip}登录失败"

from telnetlib import Telnet

try:
    try:
        tn = Telnet("192.168.0.1")
    except TimeoutError:
        raise LoginError("192.168.0.1")  # 捕获TimeoutError,抛出LoginError
except LoginError as e:  #抛出了LoginError之后,执行语句
    print(e)

192.168.0.1登录失败

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值