如何校验列表内所有对象均为str类型或None,修正现有错误校验代码
原代码错误原因
你写的str or None in (type("hi"), type("ho"), type("hey"), None)不符合预期,是Python运算符优先级导致的:or的优先级低于in,且Python计算逻辑或表达式时只要左边的结果为真,就会直接返回左值,不会执行右边的逻辑。这里str是内置类对象,布尔值为True,所以整个表达式直接返回str,后面的None in (...)完全没有运行。
正确校验逻辑
你的需求是判断列表中所有元素要么是str类型,要么是None,推荐用内置的all()函数做遍历校验,写法如下:
# 测试用例1:所有元素符合要求 test_list1 = ["hi", "ho", "hey", None] res1 = all(isinstance(item, (str, type(None))) for item in test_list1) print(res1) # 输出 True # 测试用例2:存在int类型元素,不符合要求 test_list2 = ["hi", "ho", "hey", 2] res2 = all(isinstance(item, (str, type(None))) for item in test_list2) print(res2) # 输出 False
如果你确实需要严格匹配类型、不接受str的子类,把isinstance(item, (str, type(None)))替换成type(item) in (str, type(None))即可。
内容的提问来源于stack exchange,提问作者coderxXx
相关产品推荐
相关产品推荐

