2016-04-29 4 views
1

私はタプルのリストを繰り返し処理し、その中の値を整数にしています。しかし、NoneTypeの要素に到達すると、次のエラーが発生します。整数を扱うときに 'NoneType'型のエラーが発生しました

タプルのリストを繰り返し処理し、NoneTypesを処理できるようにしたいと考えています。 NoneTypeはNoneとしてデータベースに送信する必要があるため、None型のままにする必要があります。

私はいくつかの試行錯誤コードを実行する必要があるかもしれないと思いますが、どこから始めるべきかわかりません。

次のように私が使用していたコードは次のとおりです。

big_tuple = [('17', u'15', u'9', u'1'), ('17', u'14', u'1', u'1'), ('17', u'26', None, None)] 
tuple_list = [tuple(int(el) for el in tup) for tup in big_tuple] 

最後のタプルがなければ、私は次のように返さなるだろう:私は理想的に返さ欲しい

[(17, 15, 9, 1), (17, 14, 1, 1)] 

は次のとおりです。

[(17, 15, 9, 1), (17, 14, 1, 1), (17, 14, None, None)] 

ご意見やご提案は本当に役に立ちます。

答えて

5

これは動作するはずです:

tuple_list = [ 
    tuple(int(el) if el is not None else None for el in tup) 
    for tup in big_tuple 
] 

を私は要素がNoneでないことを確認だけにしてintに変換し、それ以外の場合はNoneを置く意味します。

それとも、より読みやすく、テスト可能にする要素を変換するために別々の機能を行うことができます。

def to_int(el): 
    return int(el) if el is not None else None 

tuple_list = [tuple(map(to_int, tup)) for tup in big_tuple] 
+0

素晴らしいことだ、私はあなたがこのようなif文を統合する可能性が実現しませんでした。私は別のコード行に記述することに慣れています。 – LemusThelroy

+0

@LemusThelroy私の更新を参照してください – warvariuc

+0

elがそうでない場合は 'int(el)の説明については、[here](https://docs.python.org/2/reference/expressions.html#conditional-expressions)を参照してください。 '構文 – SiHa

関連する問題