在Python中,使用isinstance检查特定类型的异常是否合理?

2024-04-29 06:06:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中捕获一般异常,然后使用isinstance()来检测特定类型的异常,以便对其进行适当处理,这合理吗?

我正在使用dnspython工具包,它有一系列异常,比如超时、NXDOMAIN响应等。这些异常是dns.exception.DNSException的子类,所以我想知道捕获DNSException是否合理,或者说是pythonic,然后用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,所以要温柔!


Tags: host类型工具包dnsexceptionargspythonic子类
2条回答

从dns.resolver可以导入一些异常。 (未经测试的代码)

from dns.resolver import Resolver, NXDOMAIN, NoNameservers, Timeout, NoAnswer

try
    host_record = self.resolver.query(self.host, "A")
    if len(host_record) > 0:
        Mylist['ERROR'] = False
        # Do something

except NXDOMAIN:
    Mylist['ERROR'] = True
    Mylist['ERRORTYPE'] = NXDOMAIN
except NoNameservers:
    Mylist['ERROR'] = True
    Mylist['ERRORTYPE'] = NoNameservers
except Timeout:
    Mylist['ERROR'] = True
    Mylist['ERRORTYPE'] = Timeout
except NameError:
    Mylist['ERROR'] = True
    Mylist['ERRORTYPE'] = NameError

这就是multipleexcept子句的用途:

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"

注意子句的顺序:将执行第一个匹配的子句,因此将对超类的检查移到末尾。

相关问题 更多 >