首页 > 解决方案 > Python中关于None的条件语句

问题描述

PFB 程序。在那里我们有一个条件块if curr > max_v or max_v == None:。这是一个错误

TypeError: '>' not supported between instances of 'int' and 'NoneType'

但是,如果我将条件更改为max_v == None or curr > max_v:它可以正常工作。这里有什么问题。请指教。

arr_ele = []

for arr_i in range(6):
    arr_t = [int(arr_temp) for arr_temp in input().strip().split()]
    arr_ele.append(arr_t)

length = len(arr_ele[0])


max_v = None
curr = 0
for i in range(length-2):
    for j in range(length-2):
        curr = arr_ele[i][j] + arr_ele[i][j+1] + arr_ele[i][j+2] + \
               arr_ele[i+1][j+1] + \
               arr_ele[i+2][j] + arr_ele[i+2][j+1] + arr_ele[i+2][j+2]


        if  curr > max_v or max_v == None:
            max_v = curr

print(max_v)

标签: pythonif-statement

解决方案


当 Python 处理这样的逻辑表达式时,它会从左到右计算表达式。
curr > max_v or max_v == None中,当解释器处理 时curr > max_v,如果变量max_v自定义以来没有改变其值(None),它将尝试比较 anint和 a NoneType,并且该操作未被定义/允许。
在语句中max_v == None or curr > max_v,如果max_v不是整数,解释器将永远不会计算curr > max_v
一个解决方案是使用类似的东西:

import math
max_v = math.nan # Not a number
...
curr > max_v or max_v == math.nan:
...

顺便说一句,max_v == None 被认为是反模式。


推荐阅读