10

Python で一般的な例外をキャッチし、isinstance()それを適切に処理するために特定のタイプの例外を検出するために使用するのは合理的ですか?

私は現在、dnspython ツールキットをいじっています。これには、タイムアウト、NXDOMAIN 応答などのさまざまな例外があります。これらの例外は のサブクラスでdns.exception.DNSExceptionあるため、キャッチするのが合理的か、Pythonic かどうか疑問に思っています。DNSException次に、特定の例外をチェックしisinstance()ます。

例えば

try:
    answers = dns.resolver.query(args.host)
except dns.exception.DNSException as e:
    if isinstance(e, dns.resolver.NXDOMAIN):
        print "No such domain %s" % args.host
    elif isinstance(e, dns.resolver.Timeout):
        print "Timed out while resolving %s" % args.host
    else:
        print "Unhandled exception"

私はPythonが初めてなので、優しくしてください!

4

2 に答える 2

20

それが複数のexcept句の目的です。

try:
    answers = dns.resolver.query(args.host)
except dns.resolver.NXDOMAIN:
    print "No such domain %s" % args.host
except dns.resolver.Timeout:
    print "Timed out while resolving %s" % args.host
except dns.exception.DNSException:
    print "Unhandled exception"

句の順序に注意してください。最初に一致した句が使用されるため、スーパークラスのチェックを最後に移動します。

于 2012-02-11T23:43:54.193 に答える