2024-04-26 03:29:36 发布
网友
我不能使用以下语句,因为x和y可以定义为None:
x
y
None
if x*y > 9: pass
unsupported operand type(s) for *: 'NoneType' and 'NoneType'
所以我应该先检查一下是否存在:
if x and y: if x*y > 9: pass
这似乎有点多余。有没有更好的方法来实现这一点?你知道吗
你可以做:
if x and y and x*y > 9: pass
如果您得到更多的检查,使用all可能会更舒服:
all
if all([ x, y, x*y > 9, other conditions,...]): pass
虽然if x and y and x * y > 9:是最直接的方法,但我发现另一种难以定义的方法是在x和y错误时使用默认值:
if x and y and x * y > 9:
if (x or 0) * (y or 0) > 9:
因为用0替换任何一个值都会使结果为0,所以当任何一个值为None时,测试都不会通过。这是因为Python boolean and和or不返回True或False它们返回最后一个计算值(已经是truthy或falsy)。所以,如果x是一个非零数,则使用x,否则使用0,对于y也是如此。你知道吗
and
or
True
False
0
根据EAFP(Easier toAskForganity thanpermission)协议,以下是使用try and except的替代方法:
try: if x * y > 9: pass except TypeError: pass
你可以做:
如果您得到更多的检查,使用
all
可能会更舒服:虽然
if x and y and x * y > 9:
是最直接的方法,但我发现另一种难以定义的方法是在x
和y
错误时使用默认值:因为用0替换任何一个值都会使结果为0,所以当任何一个值为
None
时,测试都不会通过。这是因为Python booleanand
和or
不返回True
或False
它们返回最后一个计算值(已经是truthy或falsy)。所以,如果x
是一个非零数,则使用x
,否则使用0
,对于y
也是如此。你知道吗根据EAFP(Easier toAskForganity thanpermission)协议,以下是使用try and except的替代方法:
相关问题 更多 >
编程相关推荐