Python非空判断与类型检查写法
一、通用非空判断(变量有没有值)
Python 里空值、空字符串、空列表、0、None 都是"假值" ,可以直接用 if x: 判断。
1. 判断变量不是 None
python
x = None
if x is not None:
print("有值")
else:
print("没有值")
推荐用 is not None ,不要用 != None。
2. 判断变量"有值"(非空、非零、非 None)
python
x = ""
if x:
print("有值")
else:
print("空值")
这种写法能同时排除:None、""、[]、{}、0、0.0、False。
3. 两者的区别
python
x = 0
print(bool(x)) # False,0 是假值
print(x is not None) # True,0 不是 None
if x: # 不会进
print("有值")
if x is not None: # 会进
print("不是 None")
关键 :如果 0 是合法值,就不能用 if x:,要用 if x is not None:。
二、输入内容非空判断
用户输入用 input(),返回的是字符串。空输入就是 ""。
1. 基本判断
python
user_input = input("请输入内容: ")
if user_input:
print(f"你输入了: {user_input}")
else:
print("输入不能为空")
2. 忽略前后空格
用户可能只输入空格," " 不是空字符串,但实际没内容。
python
user_input = input("请输入内容: ")
if user_input.strip():
print(f"你输入了: {user_input.strip()}")
else:
print("输入不能为空")
推荐用 strip(),能排除纯空格、纯制表符的输入。
3. 循环直到输入非空
python
while True:
user_input = input("请输入内容: ").strip()
if user_input:
break
print("输入不能为空,请重新输入")
print(f"你输入了: {user_input}")
4. 判断是否为数字输入
python
user_input = input("请输入一个数字: ").strip()
if not user_input:
print("输入不能为空")
elif not user_input.isdigit():
print("请输入纯数字")
else:
num = int(user_input)
print(f"你输入的数字是: {num}")
注意:isdigit() 只能判断非负整数,负数、小数不行。
更通用的写法:
python
user_input = input("请输入一个数字: ").strip()
if not user_input:
print("输入不能为空")
else:
try:
num = float(user_input)
print(f"你输入的数字是: {num}")
except ValueError:
print("输入的不是有效数字")
三、数字非空判断
数字没有"空"的概念,但有两种情况需要判断:
1. 判断数字不是 None
python
num = None
if num is not None:
print(f"数字是 {num}")
else:
print("没有数字")
2. 判断数字非零
python
num = 0
if num:
print("非零")
else:
print("是零")
3. 如果 0 是合法值,要区分 None 和 0
python
num = 0
if num is None:
print("没有数字")
elif num == 0:
print("数字是 0")
else:
print(f"数字是 {num}")
四、int 型大于 0 判断
1. 基本写法
python
num = 5
if isinstance(num, int) and num > 0:
print("是正整数")
else:
print("不是正整数")
2. 只判断大于 0
python
num = 5
if num > 0:
print("大于 0")
else:
print("不大于 0")
3. 严格判断"正整数"(排除 bool 和 float)
python
num = 5
if isinstance(num, int) and not isinstance(num, bool) and num > 0:
print("是正整数")
注意 :Python 里 True 也是 int 的子类,isinstance(True, int) 是 True。如果不想把 True 当数字,要额外排除 bool。
python
print(isinstance(True, int)) # True
print(True > 0) # True
4. 结合输入,完整判断
python
user_input = input("请输入一个正整数: ").strip()
if not user_input:
print("输入不能为空")
elif not user_input.isdigit():
print("请输入纯数字")
else:
num = int(user_input)
if num > 0:
print(f"是正整数: {num}")
else:
print("必须大于 0")
isdigit() 已经保证了是非负整数,所以 num >= 0。如果要求严格大于 0,再判断 num > 0。
5. 用 try-except 处理更通用的输入
python
user_input = input("请输入一个正整数: ").strip()
if not user_input:
print("输入不能为空")
else:
try:
num = int(user_input)
if num > 0:
print(f"是正整数: {num}")
else:
print("必须大于 0")
except ValueError:
print("输入的不是整数")
五、综合模板
python
def get_positive_int(prompt="请输入一个正整数: "):
"""循环读取,直到用户输入一个正整数"""
while True:
user_input = input(prompt).strip()
# 非空判断
if not user_input:
print("输入不能为空,请重新输入")
continue
# 是否为整数
try:
num = int(user_input)
except ValueError:
print("输入的不是整数,请重新输入")
continue
# 是否大于 0
if num <= 0:
print("必须大于 0,请重新输入")
continue
return num
# 使用
n = get_positive_int()
print(f"你输入的正整数是: {n}")
六、常见写法对照表
| 场景 | 推荐写法 | 说明 |
|---|---|---|
| 变量不是 None | if x is not None: |
最准确 |
| 变量有值(非空非零) | if x: |
排除 None、""、\[\]、0 等 |
| 字符串非空 | if s: |
空字符串为假 |
| 字符串非空(忽略空格) | if s.strip(): |
排除纯空格 |
| 输入非空 | if user_input.strip(): |
推荐 |
| 数字非零 | if num: |
0 为假 |
| 数字不是 None | if num is not None: |
0 也会进 |
| int 大于 0 | if isinstance(num, int) and num > 0: |
严格判断 |
| 输入是正整数 | if user_input.isdigit() and int(user_input) > 0: |
只适用非负整数 |
| 通用数字输入 | try: num = int(s) except ValueError: |
最稳 |
七、一句话总结
| 需求 | 写法 |
|---|---|
| 判断不是 None | if x is not None: |
| 判断有值 | if x: |
| 判断字符串非空 | if s: 或 if s.strip(): |
| 判断输入非空 | if user_input.strip(): |
| 判断数字非零 | if num: |
| 判断 int 大于 0 | if isinstance(num, int) and num > 0: |
| 判断输入是正整数 | if user_input.isdigit() and int(user_input) > 0: |
| 最稳的输入处理 | while True + strip() + try-except |
核心记住:
- 判断"有没有值"用
if x:,但0和""也会被当成假。 - 只想排除
None,用if x is not None:。 - 输入判断先
strip(),再判空,再转类型。 - 转数字用
try-except最稳,isdigit()只适合非负整数。