当python3中的变量可以是非类型变量时,使用>和<操作数的最优雅方式是什么?

2022-12-01 03:55:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在python3中,在NoneType上使用><操作数将导致类型错误

例如,在比较两个日期时,我可以使用:

a = datetime(...)
b = datetime(...)

if a < b:
   // do something

但是如果a = None出于某种原因(例如,这是函数的结果),则会导致:

'<' not supported between instances of 'NoneType' and 'DateTime'

在python2中,这将计算为True

如果ab是变量,可以是datetimeNone如果其中一个值是None,我想跳过比较,解决这个问题最优雅的方法是什么

例如,以下方法可行,但感觉有更好的单线方法

if a and b:
   if a < b:
       // do something

Tags: and方法函数none类型datetimeif错误notbetweendosomethingpython3supportednonetype
3条回答

您可以使用扩展的if语句,但我通常更喜欢使用try块。这最终是非常可读的,并且显式地处理TypeErrors,同时还提供了一种相对方便的方法来处理可能出现的其他错误

try:
  if a < b:
    do_the_thing()
except TypeError:
  handle_bad_types()

由于您在这里使用的是对象而不是数字,因此我将使用简短而明确的:

if (a and b) and (a < b):
    # Do something

如果abNone,它将短路,并且永远不会执行比较

您可以使用or运算符:

a = None
b = 1    
int(a or 0) < b 

输出:

True

int(a or 0)返回0如果aNone,否则,它将返回a(如果a是一个数字)


更新:解决更新后的问题:

if None not in [a,b]: # if neither values are None
    # Do something