[013]Python的函数_异常处理_全栈基础

您好!此笔记的文本和代码以网盘形式分享于文末!

因个人能力有限,错误处欢迎大家交流和指正!基础部分内容简单,但多且零散!

python  异常处理
错误或异常:逻辑错误,异常就是程序运行时发生错误的信号;
异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正
异常处理:捕获异常,进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃
异常处理机制来增强你程序的健壮性与容错性 
1、常见错误:
AttributeError试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError输入/输出异常;基本上是无法打开文件
ImportError无法引入模块或包;基本上是路径问题或名称错误
IndentationError语法错误(的子类);代码没有正确对齐
IndexError下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError试图访问字典里不存在的键
KeyboardInterruptCtrl+C被按下
NameError使用一个还未被赋予对象的变量
SyntaxErrorPython代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError传入对象类型与要求的不符合
UnboundLocalError试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError传入一个调用者不期望的值,即使值的类型是正确的
用法栗子结果
使用if判断式# 使用if判断式
# 输入一个字符串试试
num1 = input('>>: ')
if num1.isdigit():
    #
我们的正统程序放到了这里,其余的都属于异常处理范畴
    int(num1)
elif num1.isspace():
    print('
输入的是空格,就执行我这里的逻辑')
elif len(num1) == 0:
    print('
输入的是空,就执行我这里的逻辑')
else:
    print('
其他情情况,执行我这里的逻辑')
 
1、if的方式我们只为第一段代码加上了异常处理,但这些if,跟你的代码逻辑并无关系。
2、if判断式的异常处理只能针对某一段代码,
对于不同的代码段的相同类型的错误你需要写重复的if来进行处理
3、程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差
 
try   …… except 语法try:
     被检测的代码块
except 异常类型:
     try中一旦检测到异常,就执行这个位置的逻辑
 
# 异常类只能用来处理指定的异常情况,
# 如果非指定异常则无法处理。
s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
报错
# 多分支
s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
invalid literal for int() with base 10: 'hello'
# 万能异常捕获
# 意味着处理所有异常时都使用同一个逻辑去处理
s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)
invalid literal for int() with base 10: 'hello'
# 不同的异常,制定不同的处理逻辑,则需多分支
# 多分支 + Exception
s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
except Exception as e:
    print(e)
invalid literal for int() with base 10: 'hello'
# 处理异常的其他结构
s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
else:
    print('try内代码块没有异常则执行我')
finally:
    print('无论异常与否,都会执行该模块,通常是进行清理工作')
invalid literal for int() with base 10: 'hello'
无论异常与否,都会执行该模块,
通常是进行清理工作
# 自定义异常
class YewException(BaseException):
    def __init__(self, msg):
        self.msg = msg
       
    def __str__(self):
        return self.msg


try:
    raise YewException('类型错误')
except YewException as e:
    print€
类型错误
1:把错误处理和真正的工作分开来
2:代码更易组织,更清晰,复杂的工作任务更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;
 

愿有更多的朋友,在网页笔记结构上分享更逻辑和易读的形式:

链接:暂无
提取码:暂无

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值