0

问题:[self._oun(upsplit[.....]下面给出的代码中的函数返回一个单词(字符串)或布尔值(FALSE)。现在,当通过 + 运算符进行连接时,它会尝试将 bool(比如 FALSE)与字符串连接,因此会失败并出现异常(TypeError,将 bool 与 str 连接)。返回字符串时它工作得很好。

如何以pythonic方式更改代码来处理上述问题?我只是尝试在此代码之前放置一个 if 语句来检查返回值,然后有两个 else 语句,一个如果返回值是 bool,另一个是字符串(这对我来说看起来不像 pythonic)。

return ' '.join(upsplit[:word-1] + 
                        [self._oun(upsplit[word-1], 1) +
                        '-' + upsplit[word] + '-']) + \
                        ' '.join(upsplit[(word+1):])

编辑:

如果它返回 FALSE,我只想附加 upsplit[word] 而不是返回值(这将是 bool FALSE)。请注意,该函数不返回 TRUE。它要么返回修改后的字符串,要么返回 FALSE。如果它返回 FALSE,我只需要附加存储在 upsplit[word] 中的原始字符串。

4

2 回答 2

2
return ' '.join(upsplit[:word-1] + 
                        [self._oun(upsplit[word-1], 1) or upsplit[word] +
                        '-' + upsplit[word] + '-']) + \
                        ' '.join(upsplit[(word+1):])
于 2013-06-12T08:47:10.007 回答
1

将调用包装到调用self._ounstr()。str 在 bool 上进行字符串表示('True' 或 'False'),在字符串上,它返回不变的参数。

return ' '.join(upsplit[:word-1] + 
                    [str(self._oun(upsplit[word-1], 1)) +
                    '-' + upsplit[word] + '-']) + \
                    ' '.join(upsplit[(word+1):])

编辑

在澄清注释后,Python 中的三元运算符是这样工作的:

a = ('a' if <test> else 'b')

在你的情况下

(self._oun(upsplit[word-1], 1) if (self._oun(upsplit[word-1], 1) != False) else upsplit[word-1])

请注意,它需要 2 次调用_oun,如果 _oun 返回原始字符串而不是 False,它会简单得多。

于 2013-06-12T08:43:19.917 回答