为什么连接在这两个样本中的工作方式不同?

Yes*_*ke. 0 python concatenation

我在Python代码中的两个不同的地方引发异常:

holeCards = input("Select a hand to play: ")
try:
    if len(holeCards) != 4:
        raise ValueError(holeCards + ' does not represent a valid hand.')
Run Code Online (Sandbox Code Playgroud)

AND (编辑以纠正提高代码)

def __init__(self, card):
  [...]

  if self.cardFace == -1 or self.cardSuit == -1:
    raise ValueError(card, 'is not a known card.')
Run Code Online (Sandbox Code Playgroud)

出于某种原因,第一个输出像我预期的串联字符串:

ERROR: Amsterdam does not represent a valid hand.
Run Code Online (Sandbox Code Playgroud)

但是,第二个输出了一些奇怪的set和string混合:

ERROR: ('Kr', 'is not a known card.')
Run Code Online (Sandbox Code Playgroud)

为什么"+"运算符在这两种情况下表现不同?

编辑:对init的调用如下所示:

  card1 = PokerCard(cardsStr[0:2])
  card2 = PokerCard(cardsStr[2:4])
Run Code Online (Sandbox Code Playgroud)

And*_*ffe 8

嗯,我错过了什么,或者你在比较输出

raise ValueError(card, 'is not a known card.')
Run Code Online (Sandbox Code Playgroud)

raise ValueError(card + ' is not a known card.')
Run Code Online (Sandbox Code Playgroud)

???

第二个使用"+",但第一个使用",",它确实应该给你显示的输出!

(在某些情况下,问题是从带有"+"的版本编辑的.也许这个问题应该删除???)


Jam*_*Orr 5

"card"可能代表一个包含字符串"Kr"的元组.在元组上使用+运算符时,可以创建一个添加了额外项的新元组.

编辑:不,我错了.将字符串添加到元组:

>> ("Kr",) + "foo"
Run Code Online (Sandbox Code Playgroud)

生成错误:

TypeError: can only concatenate tuple (not "str") to tuple
Run Code Online (Sandbox Code Playgroud)

确定"卡片"的类型可能会有所帮助.你知道它是什么类型的吗?如果没有,请尝试输入以下内容:

if len(card) != 2:
    print type(card)
    raise ValueError(card + ' is not a known card.')
Run Code Online (Sandbox Code Playgroud)