Python 测开27期 - WL - 学习笔记 - python 错误与异常

python 错误与异常

语法错误与定位

错误

  • 语法错误
  • 逻辑错误
  • 系统错误
# 错误
# 语法错误
num = 1
if num > 1 # 缺少冒号
    print("num>1")  # 结构是: SyntaxError: expected ':'  line 4第四行
# 逻辑错误
if num >=1:
    print("num<=1")  # 实现结果与实际场景逻辑不对
elif num>100:
    print("num<100")  # 实现结果与实际场景逻辑不对
# 系统错误
# 如运行是内存泄露、系统错误等引起的运行失败

异常

  • 程序执行过程中出现的未知错误
  • 语法和逻辑都是正常的
  • 程序业务逻辑不完善引起的程序漏洞–bug

错误与异常的区别

  • 异常可以被捕获和处理
  • 错误一般是编码错误、逻辑错误、系统错误

常见的异常类型

# 除零异常
def div(a,b):
    return a/b
print(div(1, 0)) # 异常是:ZeroDivisionError: division by zero
# 名称异常
# num =1
if numb >1:
    num =2  # 异常是:NameError: name 'numb' is not defined. Did you mean: 'num'?
# 索引异常
list = [1,2,3]
print(list[4]) # 异常是:ZeroDivisionError: division by zero
# 键异常
dict1 = {"name":"wlll","age":18}
print(dict1['sex']) # 异常是:KeyError: 'sex'
# 值异常
a = input("请输入一个值:")
print(int(a)) # 输入不是数字后,异常是:ValueError: invalid literal for int() with base 10: 'a'
# 属性异常
# 更新一些常量属性时会抛出的异常

异常/错误处理流程

  • 如果是拼写、配置等引起的错误,根据出错信息排查出现的位置进行解决
  • 如果是程序设计不完善引起的漏洞,根据漏洞的情况进行设计处理漏洞的逻辑

异常捕获、异常处理

image

def div(a, b):
    return a % b
try:
    print(div(1, 1))  # 正确显示0
except Exception as e:
    print('此处有异常', e) # 没有异常不显示,有异常显示异常
else:
    print("哈哈,没有异常") # 没有异常则打印
finally:  # 无论是否有异常后还会执行此处
    print('finally') # 结果是 finally

使用raise抛出异常

  • 使用raise 触发异常并使用exception
def aum(num):
    if num <=0 or num >=100:
        raise ValueError(f"值错误:{num}")
    else:
        print(f"设置的年龄为:{num}")
print(aum(-1)) # 主动抛出异常:ValueError: 值错误:-1
print(aum(80)) # 结果是: 设置的年龄为:80

自定义异常

  • 自己继承错误类或方法自己写一个异常定义
  • class MyError(Exception):
  • def __init__(self, value):
    
  •     self.value = value
    
  • def __str__(self):
    
  •     return repr(self.value)
    
class MyException(Exception):
    def __init__(self, value):
        self.value = value
        print(f'这是一个异常:{value}')
    def __str__(self):
        return repr(self.value)

def aum(num):
    if num <=0 or num >=100:
        raise MyException(f"值错误:{num}")
    else:
        print(f"设置的年龄为:{num}")
aum(-55) # 异常抛出:MyException: '值错误:-55'