python如何捕获指定异常_python – 你如何捕获这个异常?

这个代码是在django / db / models / fields.py它创建/定义一个异常?

class ReverseSingleRelatedObjectDescriptor(six.with_metaclass(RenameRelatedObjectDescriptorMethods)):

# This class provides the functionality that makes the related-object

# managers available as attributes on a model class, for fields that have

# a single "remote" value, on the class that defines the related field.

# In the example "choice.poll", the poll attribute is a

# ReverseSingleRelatedObjectDescriptor instance.

def __init__(self, field_with_rel):

self.field = field_with_rel

self.cache_name = self.field.get_cache_name()

@cached_property

def RelatedObjectDoesNotExist(self):

# The exception can't be created at initialization time since the

# related model might not be resolved yet; `rel.to` might still be

# a string model reference.

return type(

str('RelatedObjectDoesNotExist'),

(self.field.rel.to.DoesNotExist, AttributeError),

{}

)

这是在django / db / models / fields / related.py它引发上述异常:

def __get__(self, instance, instance_type=None):

if instance is None:

return self

try:

rel_obj = getattr(instance, self.cache_name)

except AttributeError:

val = self.field.get_local_related_value(instance)

if None in val:

rel_obj = None

else:

params = dict(

(rh_field.attname, getattr(instance, lh_field.attname))

for lh_field, rh_field in self.field.related_fields)

qs = self.get_queryset(instance=instance)

extra_filter = self.field.get_extra_descriptor_filter(instance)

if isinstance(extra_filter, dict):

params.update(extra_filter)

qs = qs.filter(**params)

else:

qs = qs.filter(extra_filter, **params)

# Assuming the database enforces foreign keys, this won't fail.

rel_obj = qs.get()

if not self.field.rel.multiple:

setattr(rel_obj, self.field.related.get_cache_name(), instance)

setattr(instance, self.cache_name, rel_obj)

if rel_obj is None and not self.field.null:

raise self.RelatedObjectDoesNotExist(

"%s has no %s." % (self.field.model.__name__, self.field.name)

)

else:

return rel_obj

问题是这段代码:

try:

val = getattr(obj, attr_name)

except related.ReverseSingleRelatedObjectDescriptor.RelatedObjectDoesNotExist:

val = None # Does not catch the thrown exception

isinstance(foo,related.FieldDoesNotExist)

除了异常作为foo:

打印类型(foo)#捕获在这里,而不是上面

将不会捕获该异常

>>>print type(foo)

except related.RelatedObjectDoesNotExist:

引发一个AttributeError:’module’对象没有属性’RelatedObjectDoesNotExist’

>>>isinstance(foo, related.ReverseSingleRelatedObjectDescriptor.RelatedObjectDoesNotExist)

Traceback (most recent call last):

File "", line 1, in

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

这可能是为什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值