【问题标题】:How to return a bool and a string in a return statement? [duplicate]如何在 return 语句中返回 bool 和 string? [复制]
【发布时间】:2020-10-25 21:52:20
【问题描述】:

我有如下声明:

if Game.item_can_move(item_target) == True:
    return True + ""

else:
    return False + ", error"

但这似乎不起作用。我想在两个 return 中都返回一个 bool, str。

【问题讨论】:

  • 使用 ,而不是 +
  • 好的,我试试用逗号代替
  • 返回一个元组:return (False, "") - () 是可选的,, 是重要部分
  • 考虑在无效情况下引发异常,而不是让调用代码检查返回值。

标签: python python-3.x string boolean


【解决方案1】:

您可以使用逗号一次返回多个内容:

if Game.item_can_move(item_target) == True:
    return True, ""

else:
    return False, "error"

您的代码不起作用的原因是您无法将 python strbool 类型连接起来。但是,您可以这样做:

if Game.item_can_move(item_target) == True:
    return str(True) + ", "

else:
    return str(False) + ", error"

顺便说一句,您的代码可以简化:

b = Game.item_can_move(item_target)
if b:
    return b, ""
return b, "error"

【讨论】:

  • 进一步简化:return b, ("" if b else "error")
  • 可以通过删除else并直接进入return语句来进一步简化
  • @jdaz 怎么样,考虑到需要返回的不同字符串?
  • 为明确起见,保留return b, "error",但只需将其从else 块中取出即可。如果b,则返回b, "",函数结束。那么它可以到达return b, "error" 的下一行的唯一方法是如果b 是假的。所以你不需要else
【解决方案2】:

你可以在这里使用三种策略,

  1. 使用 Object
class Foo:
    def __init__(self): 
        self.foo = "foo"
        self.is_bar = True   
    
def my_method(): 
    return Foo() 
          
tmp = my_method()  
print(tmp.foo) 
print(tmp.is_bar)
  1. 使用元组
def my_method(): 
    foo = "foo"
    is_bar = True
    return foo, is_bar
  1. 使用列表/dic/..
def my_method(): 
    foo = "foo"
    is_bar = True
    return [foo, is_bar]

Reference

【讨论】:

  • 所有这些都是对象,只是为了清楚
猜你喜欢
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多