提供对象或非

2024-10-01 13:23:50 发布

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

我接收带有GPS数据的UDP数据包,并用它们构造位置对象。 有时,GPS丢失卫星信号,但仍发送UDP包,没有任何有价值的数据。我希望Position构造函数在这个失败的情况下给我一个'None'对象。所以,我可以检查是否处理这个职位。像这样:

frameGPS = giveMeTheFrame()
position1 = Position(frameGPS)
if (position1 is None): don't process position1
else: process position1

这样做对吗? 如果是这样,我如何实现这个init?在


Tags: 数据对象none信号情况职位position数据包
2条回答

你可以用不同的方法来处理这个问题。通过实现__bool__发布的答案也是一个非常好的选择!在

为了提供另一种方法:

根据你对什么是垃圾数据,什么是有效数据的评论。假设您接收有效字符作为坐标。为了简单起见:

NSEW

一种方法是,如果您的类被赋予无效数据来正确实例化该类的实例,则可以让该类引发该类:

def Position:
    def __init__(self, position):
        if position.upper() not in {'N', 'S', 'E', 'W'}:
            raise InvalidPositionData('Received unexpected data {}'.format(position))
        self.position = position

在代码中,您可以简单地包装以捕获该异常:

^{pr2}$

正如coldspeed所说,你不能从__init__返回。你能做的是将对象初始化到“空”状态。使您的Position对象执行如下操作。在

class Position:
    def __init__(self, frame):
        if some_condition:
            self.okay = True
            # Success; load the frame data into Position ...
        else:
            self.okay = False
    def __bool__(self):
        return self.okay

然后你可以像你想的那样在if语句中使用它。在

^{pr2}$

请注意,在python2.x中,相关的方法称为^{},而不是{a2}。因此,如果您使用python2.x,请使用__nonzero__(),如果您使用python3.x,请使用__bool__()

相关问题 更多 >