零基础学习python第12课笔记

错误是代码不符合解释器或者编译器的语法

常见异常:
- AttributeError:属性错误,特性引用和赋值失败时会引发属性错误

- NameError:试图访问的变量名不存在
# 导致这种情况有两种,一是变量名没被定义,二是用模块没有用import导包
例
os.path
print(name)
NameError: name 'os' is not defined(NameError:名称“ os”未定义) # 报错结果
    
# 正确方法
import os # 先导包
os.path  # 运行模块
name = 1  # 给变量赋值
print(name) # 再打印
1 # 打印结果




- SyntaxError:语法错误,代码形式错误
例
a = 1
while a
    print(a)
 SyntaxError: invalid syntax # (SyntaxError:语法无效)   
    
# 正确方法
a = 1
while a: # while条件语句要加冒号
    print(a)
    
       
- KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
- IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引
- TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误
- ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

异常

注意点
# 异常本身是类

help(错误类型)  # 查看类型具体分布结构及本质print(help('NameError'))
异常结构
# python的异常结构都是继承于BaseException

# 分为四大类:
1.SystemExit: python退出异常
2.KeyboardInterrupt: 键盘打断
3.GeneratorExit: 生成器退出
4.Exception:普通异常  # 重点
错误回溯
# 查看报错原因,报错的行,以及执行的代码
# 通过错误回溯可以直接看到这些内容
# 从哪里开始报错就找到自己写的那行for i in in:
    print(i)
      File "C:/Users/Administrator/PycharmProjects/untitled2/zwm1/10.py", line 7 # 在第七行代码报错
    for i in in:
              ^
SyntaxError: invalid syntax # 报错原因语法错误:无效语法
异常处理
基本语法
# 1.基本语法

try# 可能出现错误的代码
except:
    # 捕捉到异常的处理方案try:
    # 这里是预测可能会出现的错误

    print(a)
    # 在未知错误具体类型时,用Exception
except Exception as e:
    # 出现异常处理逻辑
    print(e)
name 'a' is not defined(未定义名称“ a”) # 打印结果


Exception补充
# 代码中会出现的异常都是Exception的子类
# 在捕获异常过程中,会从上到下依次对比异常,找到之后就不会再往后查找
捕获具体异常
try:
    # 这里是预测可能会出现的错误

    print(a)
    # 在知道具体类型时
except NameError as e:
    # 处理逻辑
    print(e)
name 'a' is not defined(未定义名称“ a”) # 打印结果
进阶异常处理
else:
    # 没有异常时执行
    print()
finally:
    # 不管是否有异常都会被执行
    print()try:
    
    a = 1
    print(a)
   
except Exception as e:
    
    print(e)
else:
    print(f'没有出现异常,我被执行叻')
finally:
    print(f'不管是否会出现异常,我都会被执行')
打印结果:
1
没有出现异常,我被执行叻
不管是否会出现异常,我都会被执行
主动抛出异常–raise
while True:
    try:
        num = input('请输入数值:')
        if not num.isdigit():
            raise ValueError('num必须是int类型') # 这里的raise是主动抛出异常
        else:
            print('是int类型时,循环终止')
            break # 终止循环
    except ValueError as i:
        print(i)
        
        
        
  while True:
    try:
        num = input('请输入数值:')
        if num.isdigit():        # 条件判断,当num是int类型时
            print(f'{num}是int类型,循环终止')  # 当满足上诉条件时执行语句
            break # 终止循环
        else:
            raise ValueError(f'{num}不是int类型,请继续输入')  # f当不满足上诉条件时执行语句

    except ValueError as i:
        print(i)
      
        
自定义异常
def users():
    username = input('请输入你的用户名:')
    if len(username)> = 6:
        print('用户名符合规范')
    else:
        raise Exception('用户名不符合规范')
while True:
    try:
        users() 
    except Exception as i:  # 捕捉异常
        print(e)
    
断言----assert
# 断言 assert 条件, '抛出自定义异常'

# 满足条件会返回True
# 不满足返回Flase,报错---AssertionError

try:
    value = int(input('请输入数值:'))
    assert value > 10,f'{value}不大于10, 不满足条件'

except Exception as i:
    print(i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值