在python中捕获自定义错误

时间:2015-12-04 11:17:28

标签: python python-3.x

我正在尝试在- (IBAction)visitorLogOut:(UIButton *)sender { if (![namesLabel.text isEqualToString:@"name"]){ PFQuery *query = [PFQuery queryWithClassName:@"VisitorTest"]; [query fromLocalDatastore]; [query whereKey:@"timeOut" equalTo:@"nil"]; [query findObjectsInBackgroundWithBlock:^(NSArray *visitors, NSError *error){ NSDateFormatter *dformat = [[NSDateFormatter alloc] init]; [dformat setDateFormat:@"dd/MM/yyyy HH:mm"]; NSDate *time = [NSDate date]; NSString *timeString = [dformat stringFromDate:time]; self.person[@"timeOut"] = timeString; [self.person saveEventually]; [self.person unpinInBackground]; } ];} / try块中捕获以下错误,但因为这是生成错误的自定义模块 - 不会生成标准错误,例如{{1 }} 例如。捕获此类错误的正确方法是什么?

这是我的代码:

exception

最明显的方式:

ValueError

给出:

try:
  obj = IPWhois(ip_address)
except Exception(IPDefinedError):
  results = {}
else:
  results = obj.lookup()

我要检查的错误是:

except IPDefinedError:

2 个答案:

答案 0 :(得分:0)

这里的问题是导入!

我的导入为

from ipwhois import IPWhois

但我也需要

import ipwhois

以下是有效的:

try:
  obj = IPWhois(ip_address)
except ipwhois.exceptions.IPDefinedError:
  results = {}
else:
  results = obj.lookup()

答案 1 :(得分:0)

这是一个快速回顾。是的,您的问题中的错误确实看起来可能与导入问题有关(根据我的评论;))。

from pprint import pprint as pp


class IPDefinedError(Exception):
    """Mock IPDefinedError implementation
    """
    pass


class IPWhois(object):
    """Mock IPWhois implementation

    """

    def __init__(self, ip_address):
        if ip_address == "127.0.0.1":
            raise IPDefinedError(
                "IPv4 address '127.0.0.1' is already defined as 'Private-Use Networks' via 'RFC 1918'.")
        self._ip_address = ip_address

    def lookup(self):
        return "RESULT"


def lookup(ip_address):
    """ calculates IPWhois lookup result or None if unsuccessful

    :param ip_address:
    :return: IPWhois lookup result or None if unsuccessful
    """
    result = None
    try:
        obj = IPWhois(ip_address)
        result = obj.lookup()
    except IPDefinedError as e:
        msg = str(e)
        print("Error received: {}".format(msg))  # do something with msg
    return result


if __name__ == '__main__':
    results = map(lookup, ["192.168.1.1", "127.0.0.1"])
    pp(list(results))  # ['RESULT', None]