使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助。本文主要是讲assert断言的基础知识。
assert断言语句用来声明某个条件是真的,其作用是测试一个条件(condition)是否成立,如果不成立,则抛出异常。
assert一般用法:
assert condition
等同下面的逻辑:
如果condition为false,就raise一个AssertionError出来。逻辑上等同于:
if not condition:
raise AssertionError()
另一种使用方法:
assert condition,expression
如果condition为false,就raise一个描述为 expression 的AssertionError出来。逻辑上等同于:
if not condition:
raise AssertionError(expression)
如何为assert断言语句添加异常参数
assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下:
assert expression [, arguments]
assert 表达式 [, 参数]
eg:下面是一个封装好的机器学习的KNN算法的一个类,包含了断言:
encoding:utf-8
author = 'zhoupao'
date = '2018/9/8 13:56'
import numpy as np
from math import sqrt
from collections import Counter
class KNNClassifier:
def init(self,k):
"""初始化"""
assert k>=1, "k must be valid"
self.k=k
self._X_train=None
self._y_train=None
def fit(self,X_train,y_train):
"""
根据训练数据集X_train和y_train训练KNN分类器
:param X_train:
:param y_train:
:return:
"""
assert X_train.shape[0]==y_train.shape[0], "the size of X_train must be equal to the size of y_train"
assert self.k==X_train.shape[0], "the size of X_train must be at least k"\
self._X_train=X_train
self._y_train=y_train
return self
def predict(self,X_predict):
"""
给定待预测数据集X——predict,返回表示X_predict的结果向量
:param X_predict:
:return:
"""
assert self._X_train is not None and self._y_train is not None, "must fit before predict"
assert X_predict.shape[1] == self._X_train.shape[1], "the feature number of X_predict must be equal to X_train"
def _prefit(self,x):
"""
给定单个待定预测数据x,返回x的预测结果集
:param x:
:return:
"""
assert x.shape[0]==self._X_train.shape[1], "the feature number of x must be equal to X_train"
# 计算给定预测数据和所有样本的所有x的距离
distances=[sqrt(np.sum((x_train-x)**2)) for x_train in self._X_train]
# 进行排序
nearest=np.argsort(distances)
topK_y=[self._y_train[i] for i in nearest[:self.k]]
votes=Counter(topK_y)
return votes.most_common(1)[0][0]
网友评论