2

こんにちは、例外がスローされた時点から続行する方法はありますか? たとえば、次の疑似コードがあります

unique code 1
unique code 2
unique code 3

一意のコードステートメントの例外を無視したい場合は、次のようにする必要があります。

try:
  #unique code 1
except:
  pass

try:
  #unique code 2
except:
  pass

try:
  #unique code 3
except:
  pass

しかし、これは私にとってエレガントではありません。私の人生では、前回この種の問題をどのように解決したか思い出せません...私が持ちたいのは次のようなものです

try:
  unique code 1
  unique code 2
  unique code 3
except:
  continue from last exception raised

更新: 理由: 私がこれについて質問している理由は、上記の 3 行のコードが同じ種類の例外を共有しているからです。たとえば、配列から情報を抽出します。この特定のシナリオでは、値の例外はあまり気にしません。配列にはありません。

4

2 に答える 2

2

各コード セクションを関数にラップしてから、それぞれを for ループで呼び出してみます。

def code1():
    #unique code 1

def code2():
    #unique code 2

def code3():
    #unique code 3

for section in [code1, code2, code3]:
    try:
        section()
    except:
        pass

編集:まだ別の方法を探している場合は、デコレータを使用して、各呼び出しを「安全」に購入し、エラーをスローする代わりにエラーを返すことができます。これが本当にpythonicなのか、物事を行うための優れた方法なのかはわかりませんが、それは方法です:

def safe_call(fn):
    def wrapper(*args, **kwargs):
        try:
            return fn(*args, **kwargs)
        except Exception as error:
            return error
    return wrapper

@safe_call
def code1():
    #unique code 1

@safe_call
def code2():
    #unique code 2

@safe_call
def code3():
    #unique code 3

code1()
code2()
code3()
于 2012-06-27T03:17:20.917 に答える
0

whileループを使用できます。

#!/urs/bin/env python 

 check = 0
 while True:
     try:
         if check == 0:
             #unique_code_one ()  
             check += 1
         if check == 1:
             #unique_code_two () 
             check += 1 
         if check == 2:
             #unique_code_three() 
     except: 
         check = 2 
于 2012-06-27T10:58:01.550 に答える