py2neo добавяне на връзки в цикъл

Имам следния код, който взема списък с домейни от моята база данни Neo4j, извършва търсене на IP и след това създава връзка, ако такава все още не съществува. Работи добре до последните няколко реда код, където се създават връзките. Получавам следната грешка. Потвърдих, че списъците имат два елемента - домейн и IP, така че не съм сигурен защо създава грешка:

  File "C:\Python26\beta7_whois4j_monitor_debug.py", line 63, in createrels
  rels1 = graph_db.get_or_create_relationships((whoisnodes[0], "links", whoisnodes[1]))
  IndexError: list index out of range

Ето кода:

whoisindex = graph_db.get_or_create_index(neo4j.Node, "whoisID")
domains = whoisindex.query("whoisID:*com")

for i in domains:
    list1 = []
    value1 = "{0}".format(i['whoisID'])
    try:
        e = socket.gethostbyname(value1)
    except socket.gaierror:
        e = 'exclude from list'
    if e != 'exclude from list':
        list1.append(value1)
        list1.append(e)
        for word in list1:
            whoisnodes = []
            whoisnodes.append(whoisindex.get_or_create("whoisID", word, "whoisID":word}))
            rels1 = graph_db.get_or_create_relationships(
            (whoisnodes[0], "links", whoisnodes[1]))
            print "{0}".format(i['whoisID']) 

person Chris Hall    schedule 25.01.2013    source източник


Отговори (2)


Малко съм объркан какво се опитвате да направите тук. За всяка итерация на вашия цикъл for word in list вие нулирате whoisnodes към нов списък, преди да добавите един елемент към него на реда по-долу. Това означава, че може да има само един елемент в списъка до момента, в който извикате get_or_create_relationships, следователно IndexError, когато се опитате да получите достъп до whoisnodes[1].

Имахте предвид whoisnodes = [] да бъде извън цикъла?

Между другото, има и правописна грешка (липсваща къдрава скоба):

whoisindex.get_or_create("whoisID", word, "whoisID":word})

трябва да се чете:

whoisindex.get_or_create("whoisID", word, {"whoisID":word})
person Nigel Small    schedule 25.01.2013
comment
Найджъл, опитвам се да създам връзка за всяка итерация на list1, която е създадена. Преместих whoisnodes[] извън цикъла и той все още връща грешката - person Chris Hall; 25.01.2013

вторият ми опит, въпреки че сега връща JSON грешка:

whoisindex = graph_db.get_or_create_index(neo4j.Node, "whoisID")
domains = whoisindex.query("whoisID:*com")

for i in domains:
list1 = []
value1 = "{0}".format(i['whoisID'])    
try:
    e = socket.gethostbyname(value1)
except socket.gaierror:
    e = 'exclude from list'
if e != 'exclude from list':
    list1.append(value1)
    list1.append(e)        
    list1.append(whoisindex.get_or_create("whoisID", i, {"whoisID":i}))
    rels1 = graph_db.get_or_create_relationships(
        (list1[0], "links", list1[1]))
    print "{0}".format(i['whoisID']) 
person Chris Hall    schedule 25.01.2013