6

私は持っている:

try:
   ...
except Exception, e:
   print "Problem. %s" % str(e)

ただし、試してみると、例外が発生したかのように動作する必要があります。それは非Pythonicですか:

try:
   ...
   raise Exception, 'Type 1 error'
   ...

except Exception, e:
   print "Problem. Type 2 error %s" % str(e)
4

2 に答える 2

10

これはデザインが悪いと思います。例外が発生しなかった場合 (およびその場合にのみ) 何らかのアクションを実行する必要がある場合、それがこのelse句の目的です。無条件に何らかの行動を起こす必要がある場合は、それfinallyが目的です。ここにデモンストレーションがあります:

def myraise(arg):
    try:
        if arg:
            raise ValueError('arg is True')
    except ValueError as e:
        print(e)
    else:
        print('arg is False')
    finally:
        print("see this no matter what")

myraise(1)
myraise(0)

無条件コードを因数分解し、必要に応じfinallyて他のものをexcept/に入れる必要がありelseます。

于 2012-09-12T18:22:20.470 に答える
4

あなたがしていることは「unPythonic」だと思います。試行は実際には、特定の方法で失敗する可能性があると予想されるコードの小さな部分 (理想的には 1 行) のみをカバーする必要があります。必要な動作を取得するには、try/except/else/finally を使用できるはずです。

try:
    #line which might fail
except ExceptionType: # the exception type which you are worried about
    #what to do if it raises the exception
else:
    #this gets done if try is successful
finally:
    #this gets done last in both cases (try successful or not)
于 2012-09-12T18:22:33.167 に答える