Pythonic方式处理typeerror异常

时间:2013-06-12 08:28:44

标签: python

问题:下面给出的代码中的函数[self._oun(upsplit[.....]返回一个单词(字符串)或一个bool(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]中的原始字符串。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

self._oun来电中将来电置于str()。 str on 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返回orignal字符串而不是False,则会更简单。