【问题标题】:Function return comma values函数返回逗号值
【发布时间】:2020-06-13 20:09:37
【问题描述】:

如何防范这种情况? 如果 x=1 没问题,但是当 x=0 时:

def test():

    x=0
    if (x == 0): return 0
    else:
        return 'abc', 100, 200


a, b, c = test()
print(b)

TypeError: cannot unpack non-iterable int object.

也许这样的解决方案会更好?

class ReturnValue:
    def __init__(self):
        self.a = "a"
        self.b = 100
        self.c = 200

def test():
    return ReturnValue()

t = test()
if (t):
    print("%s, %s, %s" % (t.a,t.b,t.c))
else:
    print("error")

【问题讨论】:

  • x=0 test() 将返回0 并且a,b,c=0 将抛出异常。
  • 很明显,当 x=0 时返回一个参数,但函数调用中期望三个参数
  • 是的,很清楚,我的意思是如何预防
  • 我不知道你的代码目标,但是,简单的方法:if (x == 0): return 0,0,0
  • 我检查字符串校验和。如果不正确,如果正确则返回 0,我继续调查并返回几个结果。也许我最好使用一个类来返回结果?

标签: python


【解决方案1】:

返回可变数量的值通常是个坏主意,但您可以这样做:

def test():
    x=0
    if (x == 0): return (0,)
    return 'abc', 100, 200

vals = test()
if len(vals) == 1:
    a = vals[0]
elif len(vals) == 3:
    a,b,c = vals

参考:https://stackoverflow.com/a/30703804/6912045

【讨论】:

    【解决方案2】:

    一般来说,保持函数签名一致是个好主意,这意味着它总是返回相同数量和类型的值。您在此处实现的内容在一种情况下返回单个 int,在另一种情况下返回整数元组。

    当预期为 3 时返回 1 值,无法正常工作。

    对于 0 的情况,您可以抛出异常,否则可以选择返回一个元组,其中第一个元素表示函数的状态,如下所述:https://stackoverflow.com/a/1630722/2823986

    【讨论】:

      【解决方案3】:

      我可以看到您收到此错误“TypeError: cannot unpack non-iterable int object”,因为在“X=0”的返回语句中返回值即 0 但它应该是 0,0,0想分配三个值 a,b,c。

      试试下面的代码,它会解决你的错误:

      定义测试():

      x=0
      if (x == 0): return 0,0,0
      else:
          return 'abc', 100, 200
      

      a, b, c = 测试() 打印(b)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-15
        • 2015-11-12
        • 1970-01-01
        • 2021-10-06
        • 2012-02-11
        • 2010-12-13
        • 2020-10-27
        相关资源
        最近更新 更多