【python】关于判断空值None、判断len()=0,和 if not 的区别

news2024/9/20 22:54:23

如果我们问一个问题:如果一个东西是不存在的,那么它的长度是多少?
我一开始会不假思索地回答:都不存在了,长度肯定是0啦。
但是细想一下,它都不存在了,还怎么会有长度呢?

这就有点像佛家的“空”和道家的“无”的区别:
在这里插入图片描述
自古中国古代最朴素的哲学思辨,关于“空”与“无”之辩,在python中亦有出现,关于None,和空数值。

在程序中,判断里面没有值和判断东西是不是为空,也是不一样的东西,我们可以往下看看具体的区别。

1. “空” 和 “无”

佛家的“空”,指的是一起都不存在,所有事物本质上都是没有实体的。这就像是None,对象是不存在的,也无所谓有长度、大小,也不会是空的字符串类型。(当然,None也是一种数据类型)

而道家所讲的“无”,并不是指虚无缥缈的不存在,而是没有形、色、声、味、触等属性的存在状态。

这就像是空数值,例如 字符串的“”,列表的[ ], 字典的{ }, 集合的(),它们就像是一个空箱子,只是里面没有值而已,但不代表什么也没有,它们能被衡量(判断长度),能放置物品(添加数值),区别于None。

它不是什么都不存在,只是里头没有数值,但是它能被探测出长度,可以用len() 去获取它的长度值。

我们先来看看三种不同关于空的条件表达式:

判断对象里面没有值,对应的是:if len(value)==0:if len(value)!=0:
判断对象是否为空的字符串:if value=="":if value ! ="":
判断对象是否为空:if value is None: /if a ==None:if value is not None : /if a ! =None:

这三者是不一样的东西,我们可以看看下面的代码,以None为主的判断:

a=None
#print(len(a)) #这个会报错,因为空值是不能用len() 的

if a is None: #这个符合
    print('a是空值')
if a : #如果a存在
    print('a is exist')
if not a :
    print('a is not exist') #这个也符合
if a=="":
    print('a为空的字符串')

结果:
在这里插入图片描述

以下是以没有数值的判断:

b=''
print(len(b)) 

if b is None: 
    print('b是空值')
if b : #如果a存在
    print('b is exist')
if not b :
    print('b is not exist') 
if b=="":
    print('b为空的字符串')

结果:
在这里插入图片描述
这里很神奇的是,b 不符合if b is None 的判断,但是符合
if not b的判断。而 None值也符合if not 的判断

b 不符合if b is None 的判断很好理解,因为b 是“”,本来就不是None值。

那为什么 None值和空字符串值,都能成立if not 的判断?是因为
if not 是判断值,是否为布尔值 False。

而无论是空字符串(‘’)、None、False、0、空列表 []、空字典 {} 或空集合 set(),都被视为 False的布尔值;

所以是 not False 的结果是 True, not 操作符反转了布尔值。

因此,if not b: 这个条件就变为真,print() 函数将被执行。

2. None、len()=0 和 if not 的差别整理:

针对上面所说的,对 判断对象是否为空值,判断是否为None值,和判断长度是否为0做以下的表格,None值见最右列:

在这里插入图片描述

各类型的python的写法对比:

# 字符串
s = ""
if not s:  # 检查空值或长度为0
    print("判断是空值")
if len(s) == 0:  # 明确检查长度为0
    print("长度为0")
print(len(s)) #0

# 列表
lst = []
if not lst:  # 检查空值或长度为0
    print("空值")
if len(lst) == 0:  # 明确检查长度为0
    print("List has a length of 0.")

# 字典
d = {}
if not d:  # 检查空值或长度为0
    print("Dictionary is empty or has a length of 0.")
if len(d) == 0:  # 明确检查长度为0
    print("Dictionary has a length of 0.")

3. None值不能用len() 判断

注意:None值是不能用len()的,不然会报出下面的错误:

a=None
print(len(a))

TypeError: object of type ‘NoneType’ has no len()

在这里插入图片描述
因此判断None值,只能用if None 来判断。

4. find_element 找不到元素的方法:

我们在日常写代码的时候,可能容易避免这样的问题。但如果我们在使用Selenium的find_element 的方法,去获取某个网页源码元素的时候,当页面上的单个元素查找不到时,元素不存在,find_element 会抛出一个 NoSuchElementException

如果是这样的写法:

if driver.find_element(By.XPATH,“XXX” )==Noneprint("空")

会报出上面的错误。

这里我们虽然写的逻辑是找某个网页上的元素,如果找不到,就判断返回的内容是否为None值。

但是由于driver.find_element如果找不到内容,会直接触发Exception错误,而不是返回None值,因此要用try except 的方法接住错误:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome()

try:
    # 尝试查找元素
    element = driver.find_element(By.XPATH,“XXX” )
    # 如果元素存在,可以进行后续操作
    element.click()  # 假设点击该元素
except NoSuchElementException:
    # 如果元素不存在,执行这里的代码
    print("元素不存在")

PS:文字截图来自网络文章:“空”和“无”

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】数据类型与变量(二)

目录 3.变量 3.1什么是变量(变量的概念) 3.2语法格式 ​编辑​编辑3.3整型变量 3.3.1整型变量如何定义 ​编辑 3.3.2长整型变量 3.3.3短整型变量 3.3.4字节型变量 3.4浮点型变量 3.4.1双精度浮点型 3.4.2单精度浮点型 3.4.3单精度浮点型与双…

【大模型开源教程】Git开源教程「动手学大模型应用开发」,学微调也太简单了

LLM 正逐步成为信息世界的新革命力量,其通过强大的自然语言理解、自然语言生成能力,为开发者提供了新的、更强大的应用开发选择。随着国内外井喷式的 LLM API 服务开放,如何基于 LLM API 快速、便捷地开发具备更强能力、集成 LLM 的应用&…

AI搜索“懒人神器”,如何向谷歌和百度发起挑战?

“属于传统搜索的时代,已经彻底落幕了。” 2024年2月,全球IT分析与评估机构Gartner在一份报告中如此判断。同时该机构预测,到2026年,传统搜索引擎的搜索量将减少25%。 与此同时,从最近公布的财报来看&…

源代码加密是什么?给源代码加密如何做?

一、源代码加密是什么? 源代码加密是一种通过特定的加密算法和工具对软件源代码文件进行保护的技术,使得只有授权用户才能解密和访问代码。加密技术可以防止未经授权的访问、阅读、修改或复制源代码。源代码加密,则是对源代码文件进行加密处…

Kubernetes高级调度2

一.Taint和Toleration 1.为什么使用taint (1)不让pod被部署到被设置为污点的节点上。 (2)不让master节点部署业务,只部署系统组件 (3)除了指点pod外,不想让节点部署其他pod 2.为…

解决ESP32 VScode环境报错:Something went wrong while trying to build the project。

当我在vscode开发esp32时,点击构建项目 报了个错。 说明:项目目录包含了中文字符,我给换成全英文路径,再次尝试 成功 改完发现还有问题,来到这个目录,里面的中文也要改成英文。(不止&#xff0…

Qt是不是经常写个QWidget输入参数?

发现Qt自带的一个输入控件QInputDialog类 QInputDialog类提供了一个简单方便的对话框,用于从用户获取单个值。 输入值可以是字符串、数字或列表中的项。必须设置一个标签来告诉用户他们应该输入什么。 提供了五个静态方便函数:getText()、getMultiLineText()、getI…

干货:2024年四大免费PDF编辑器精选指南!

在日常生活工作中,我们几乎每天都会接触到PDF文档。当我们需要对这些文档进行编辑时,一些出色的免费PDF编辑器十分重要。接下来,我将分享自己使用过的几款优秀的免费PDF编辑器! 福昕PDF编辑器:简洁高效的编辑体验 链…

【Python基础】学习Python常见的几种运行报错,看完之后,你就不会再犯错了!!!(附带解析)

学习Python时,遇到运行时错误是很常见的,这些错误通常是因为代码中存在语法错误、逻辑错误或是对Python的某些特性理解不够深入所导致的。 如果你也是刚入门的小伙伴呢,小编为你们准备了入门Python学习籽料和Python入门实践,点击…

期权末日轮的前提——高杠杆特性是怎样的?

今天带你了解期权末日轮的前提——高杠杆特性是怎样的?期权末日轮是临近期权到期行权,期权合约往往出现大的波动涨跌幅。 如何在实际交易过程中艺术的运用期权产品的高杠杆,始终是一个永无止境的话题,结合一些实战上的经验就是&a…

miniQMT怎么获取历史/最新行情?miniQMT原生python环境如何获取历史/最新行情?

原生Python 调用方法 python from xtquant import xtdata xtdata.get_market_data_ex(field_list[],# 字段stock_list[],# 合约代码列表period1d,# 数据周期——1m、5m、1d、tickstart_time,# 数据起始时间%Y%m%d或%Y%m%d%H%M%Send_time,# 数据结束时间%Y%m%d或%Y%m%d%H%M%Sc…

QT中UI实现小功能的步骤

1、新建一个目录 要勾选Generate form,生成一个.ui文件 把Shadow build的勾选取消,避免产生两个文件夹! 2、具体步骤 1.在UI界面中拖拽需要的组件对象 2.修改组件对象的名称 3.保存并运行,根据运行结果适当调整界面布局 4.业…

真正懂耳机的人选了什么?开放式耳机推荐

真正懂耳机的人,在选择耳机时,往往会更注重音质的自然还原、佩戴的舒适度、以及耳机的设计是否符合个人审美和生活习惯。开放式耳机以其独特的开放式设计,能够带来更为自然、宽广的声场体验,同时减少对耳朵的压迫感,成…

宝藏!《联盟作文班配套讲义》(九尾篇)

本文内容,全部选自自动化考研联盟企业店的:独家制作,《联盟作文班配套讲义》(九尾篇)。 Part1:资料封面&目录 Part2:各章节内容展示 第一章 考研英语作文开篇总述 第二章、 小作文(英语一英语二) 第三章、 英语&…

docker拉取镜像并安装mysql

一. linux安装docker 1. 先删除本机旧的或者残留的docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2. 安装依赖 sudo yum update -y && sudo yum i…

相机标定板生成

推荐一个好用的网站: https://calib.io/pages/camera-calibration-pattern-generator 可以生成多种样式的棋盘格, 大小, 行列数也都可以设置, 非常方便。 另外推荐结合相机标定程序使用, 效果更佳!&#x…

分布式中间件

1.Nacos 服务注册和服务发现原理图: 1.服务提供方将集群信息注册到Nacos,并定期心跳包提供健康信息,宕机即剔除 2.服务消费方定期拉取订阅信息,获取服务实例列表 3.服务集群的负载均衡是在消费者一方进行选择 负载均衡&#xf…

使用第三方API打造智能对话:Amazon Lex聊天机器人轻松实现

这是本系列文章的第四篇,旨在通过动手实践,帮助大家学习亚马逊云科技的生成式AI相关技能。通过这些文章,大家将掌握如何利用亚马逊云科技的各类服务来应用AI技术。 那么让我们开始今天的内容吧! 引言 什么是Amazon Lex&#xf…

第十三章- 游戏结束

在这个例子中我们开始研究一个带有记分的真正可玩的游戏。我们给MyWidget一个新的名字GameBoard并添加一些槽。 我们把定义放在gamebrd.h并把实现放在gamebrd.cpp。 CannonField现在有了一个游戏结束状态。 在LCDRange中的布局问题已经修好了。 lcdrange.h包含LCDRange类定…

如何使用ssm实现学生就业管理系统

TOC ssm328学生就业管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。…