Python逻辑运算符或

时间:2014-12-29 23:36:46

标签: python

我有这段代码:

p = "string", "string2"
s = None
if p != None or  s !=  None:
    r = p + s

如果这两个条件中的一个不是p+s,我想执行None。但我得到一个连接错误:TypeError: can only concatenate tuple (not "NoneType") to tuple

我会试着更清楚。我在3D应用程序中使用python。因此变量用于存储一些3D对象的名称。 P表示多边形对象,S表示nurbsSurface对象。在某些情况下,在3D场景中可能不存在这些对象中的一个。所以变量返回None。我需要在变量R中存储S或P或两者。

3 个答案:

答案 0 :(得分:2)

从各种评论来看,您似乎更喜欢以下内容:

if p is not None or s is not None:
    r = (p or ()) + (s or ())

可以使用if/else表达式,但这个更简单的表达式就足够了。

仍然,对于我们中间的学生,

    r = (() if p is None else p) + (() if s is None else s)

将是一个完全编码的变体。

答案 1 :(得分:1)

Python不允许您连接无组的元组。 在你的例子中变量" s"是None,因此行r = p + s会给出连接错误。您应该更改您的代码,如下所示:

p = "string", "string2"
s = None
if p and s:
    r = p + s
elif p:
    r = p
else:
    r = s

答案 2 :(得分:0)

所以,我不确定execute p+s的意思,但连接错误是完全合理的。

python不允许向元组添加None。我的理解是你需要无缝地设置r p,s或两者:

注意:在误解后编辑,也使用一套解决方案,这似乎可能适合您的目的,因为您不需要重复,并且您没有表明订单很重要,它也允许对于我觉得稍微清洁的解决方案。

p = "string", "string2"
s = None
r = p or set() | s or set()

另外,根据您的解释,您似乎并不需要if语句,因为结果将始终包含其中一个。如果这不正确,请告诉我。