0

問題:[self._oun(upsplit[.....]以下のコードの関数は、単語 (文字列) または bool (FALSE) を返します。+ 演算子による連結が発生すると、bool (FALSE など) と文字列を連結しようとするため、例外 (TypeError、bool と str の連結) で失敗します。文字列が返されると、完全に正常に機能します。

上記の問題を処理するために、Pythonic の方法でコードを変更するにはどうすればよいですか? このコードの前にifステートメントを置いて戻り値をチェックし、2つのelseステートメントを入れようとしました。

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._ounへの呼び出しを呼び出しにラップしstr()ます。bool の str は文字列表現 ('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 に答える