2016-09-01 1 views
0

私はこのコードを持っており、それを短縮したいと思います。これはとにかく可能ですか?あまり意味は、その多くの場合、同じコードを持っていることを確認していません。Python使用方法 "try:"例外が発生したときに停止しない

try: 
 
    years = values['year'] 
 
except KeyError: 
 
    pass 
 

 
try: 
 
    tracks = values['track'] 
 
except KeyError: 
 
    pass 
 

 
try: 
 
    statuses = values['status'] 
 
except KeyError: 
 
    pass 
 
    

+2

それは何のための機能です。 – Goyo

答えて

10

どのように完全に例外を避けることは?

.get()

@DSMによるコメントで述べたように

years = values.get('year') # Implicitly default to None 
tracks = values.get('track', None) # Explicitly default to None 
statuses = values.get('status', 'Unknown') # Or use any custom value 

、これはそれがすべての変数があることが保証されますことに、あなたのコードは異なり...彼らはキーが既に存在していない場合は、デフォルト値を提供することができますの一部には、という値が設定されています。それ以外の場合は、いずれかの変数を使用しようとすると、実行時にNameErrorになることがあります。

あまり効率的ではなく、キーが存在する場合、あなたはまた、明示的にチェックすることができます...

if 'year' in values: 
    # do something 
+3

このコードはOPのものと異なり、3つの名前がす​​べて拘束されるという点でより優れています。 OPは、コードのさまざまな部分を 'try/except NameError:'で囲む必要があります。これは優しくないものです。 (私自身、何年もトラックには0の代わりにデフォルトのNoneを使用していますが、それは少なくとも議論の余地があります)。 – DSM

+0

@DSMええ、私はデフォルトで提供するフェンスにいました。私は整数値だったので '0'で行きましたが、_valid_値になる可能性は低いですが、おそらくNones自身も使用していました。 – Basic

+0

これです。これを行う。あなたの可読性のためにこれを行うという習慣を身につけてください。 – n1c9

-2

ここに行きます。

try: 
    years = values['year'] 
    tracks = values['track'] 
    statuses = values['status'] 
except KeyError: 
    pass 
+1

例外が発生するとすぐに実行を停止し、存在するキーを無視する可能性があるため、これは良くありません。 –

+0

@BenBeirutそれは本当ですが、あなたはそれが良いか悪いか分からない。 1つの値に失敗すると、プログラムがクラッシュしますか?もしそうなら、これはちょうどいいです。 – bravosierra99

+2

OPはロジックを変更するのではなく、そのコードをリファクタリングすることを希望します。 –

関連する問題