2016-10-10 69 views
-1

我需要找出给定命名元组是否存在于命名元组列表中(命名元组是指例如'Polygon'中的A(2,3)类)。如果给定的元组不在列表中,我们将元组附加到列表中。如果它存在,则引发用户定义的异常。该功能在列表中不存在给定点时起作用。但是,如果这个观点确实存在,那么就不会出现异常,并且它会再次添加到列表的末尾。这里是我到目前为止有: 类ExistingPointError(例外): DEF 初始化(个体经营,价值): self.value = 0在命名元组列表中搜索命名元组

class Polygon(object): 
    counter = 0 
    def __init__(self): 
     Polygon.counter+=1 
     self.points = [] 


# and here's the function that I'm working with 

    def setter(self,pt): 
     def isThere(pt): 
       if pt in self.points: raise ExistingPointError() 

      print("Setting Point") 
     try: 
      isThere(pt) 
      self.points.append(pt) 
     except ExistingPointError as E: 
      print("Point exists! value: ", E) 
     print(self.points) 


P = Polygon() 
point=collections.namedtuple('PointName','Name x y') 
A = point(Name = 'A', x = 5, y = 0) 
B = point(Name = 'B',x = 10,y = 5) 
C = point(Name = 'C',x=5,y=10) 
D = point(Name = 'D', x=-2,y=8) 
lst = [A,B,C,D] 
P.createPolygon(lst) 
P.setter(D) 
+0

你应该发布'pt'看起来像你如何定义你的命名元组。 – khachik

+0

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。具体而言,您没有发布重现问题的代码。 – Prune

+1

,并且'isThere'中的循环没有任何意义。 – khachik

回答

0

这个怎么样?

def setter(self,pt): 
    def isThere(pt): 
     if pt in self.points: 
      raise ExistingPointError() 
     print("Setting Point") 
    try: 
     isThere(pt) 
     self.points.append(pt) 
    except ExistingPointError as E: 
     print("Point exists! value: ", E) 
    print(self.points) 

但我不确定是否有例外,也许试试这个:

def setter(self,pt): 
    if pt in self.points: 
     print("Point exists!") 
    else: 
     self.points.append(pt) 
    print(self.points) 
+0

我以前试过这个,给我同样的答案:( – Shruthi

+0

看到的东西是你的for循环没有任何意义,并且不需要异常。你确定点是相同的吗?(一个命名的元组不同于常规元组) – 2016-10-10 17:52:15

+0

是的,我尝试了没有for循环,我得到了相同的答案。所有的点都被命名为元组:L这是一个实验室任务,所以问题说明我必须使用异常 – Shruthi

0

你想提出一个用户定义的错误ExistingPointError(),但你还没有真正定义它是什么。当我运行代码,并插入重复解析成一个多边形对象,我得到以下错误:

Traceback (most recent call last): 
File "python", line 27, in <module> 
File "python", line 20, in setter 
NameError: name 'ExistingPointError' is not defined 

您可能不需要为@Gjhuizing提到引发异常这一点。告诉用户该对象已经存在的简单消息应该足以满足您的需求。