2017-10-09 3 views
2

map()内でエラーを処理する方法を理解していますか?プログラムがクラッシュすることなく、この種のエラーを処理できるようにしたいと思います。try-exceptで処理されないtry-expect内のmap()の内部で例外が発生しました

def add_one(val): 
    raise Exception('My error!') 
    return val+1 

values = [1,2,3,4] 

# Does not work 
try: 
    new_values = map(add_one, values) 
except: 
    new_values = [] 
print(list(new_values)) # Raises an Exception: My error! 

# Works 
try: 
    new_values = [] 
    for x in values: 
     new_values.append(add_one(x)) 
except: 
    new_values = [] 
print(new_values) # Returns [] 

答えて

1

mapは遅延です。実際には必要になるまでデータを消費しません。

あなたが提供した2つの例は同等ではありません。

+0

もっと明示的に、 'add_one'は' map'によって返されたイテラブルから最初のアイテムを*取得するまで実際には呼び出されません。 – chepner

+0

[OK]を、マップ部分のエラーを処理する方法はできますか? 2番目の例は、機能が適切に機能していることを確認するための自分の正気のためです。私はそれが必要ではないと思う。 –

+0

ああああああああ@私はそれを呼び出すまでジェネレータが何かを評価しないことを忘れていた!ありがとう!私が最後にそれを評価しようとしたときに、try-expectの外側にエラーを投げていました。 –

関連する問題