2016-07-25 21 views
2

Ich debugging Python-Code (Python2.7.12) wie mein Code funktioniert, aber ich bekomme NULL für alle Variablen beim Streaming Tweets in der Datenbank.Ausnahme AttributError: "'NoneType' Objekt hat kein Attribut 'Pfad'" in

Der Fehler ich habe ist:

Exception AttributeError: "'NoneType' object has no attribute 'path'" in <function _remove at 0x10068f140> ignored 

ich diesen Fehler gehe davon aus dem folgenden Code wird:

def put_tweets_in_database(tweets): 
    print "putting tweets in database" 
    errors = 0 
    count = 0 

    for tweet in tweets: 
     try: 
      commit_tweet_to_database(tweet, count, len(tweets)) 
      count += 1 
     except Exception as e: 
      print e 
      session.rollback() 
      errors += 1 
    print 'there were {} errors'.format(errors) 

Ich glaube nicht die Funktion commit_tweet_to_database() falsch ist ...

Haben Sie eine Idee ...? Ich würde mich über jede Hilfe freuen!

Vielen Dank.

+0

Ich wette, es gibt keine benutzerdefinierte '_remove' im Kontext, es gab keine Zeilennummer für den Fehler und die Ausnahme wird zwischen Schleifeniterationen ausgelöst. Ich vermute also, dass es etwas mit dem Schleifen-Iterator zu tun hat, möglicherweise einen Fehler in Python. –

+0

Hinweis: Der Fehler tritt nur bei mir auf, wenn ich den Code mit 'pdb' durchlaufe (kein Reim gemeint). –

Antwort

0
Exception AttributeError: "'NoneType' object has no attribute 'path'" in <function _remove at 0x10068f140> ignored 

Dies sagt, dass ein Attribut _removepath in Funktion versucht wurde auf einem NoneType Objekt zugegriffen werden soll. NoneType Objekte haben keine Attribute. Also müssen Sie vielleicht die _remove Funktion ansehen und das Debuggen von dort starten.

-1

ich den gleichen Fehler haben und hier ist mein Fall:

browser = webdriver.Firefox()

browser.get ('http://www.google.com')

Druck browser.title

  • Das folgende wird mir eine Fehlermeldung geben: 'NoneType' Objekt hat kein Attribut 'Pfad'

browser.quit()

  • dies folgenden Fehler nicht

browser.close()

Also die Frage geben wird, ist, dass Sie die falsche Methode für Ihr Objekt verwenden!

+0

close() ist anders als quit() ... du kannst sie nicht einfach austauschen –

2

Ich habe auch mit diesem Fehler zu tun. Ich habe versucht, mit der browser.close() -Methode, und während es stoppt das - 'NoneType' Objekt hat keine Attribut "Pfad" - von der Anzeige, ich bin mit einer Reihe von offenen Firefox Browser-Instanzen.

Die Methode .close() schließt chrome, und es wird nicht der NoneType-Fehler in Firefox ausgelöst, aber Firefox bleibt geöffnet. Die Methode .quit() schließt beide Browser, wirft aber den Fehler für Firefox.

Ich verwende Djangos StaticLiveServerTestCase Klasse für meinen Code.

Ich habe eine kleine Debugger-Schleife geschrieben, um die Dinge zu testen. Kommentieren Sie einfach die Anweisungen .quit() und .close(), und kommentieren Sie sie aus.

class BaseTestCase(StaticLiveServerTestCase): 

    @classmethod 
    def setUp(self): 

     self.firefox = webdriver.Firefox() 
     self.chrome = webdriver.Chrome() 
     self.browsers = [self.firefox, self.chrome] 

    @classmethod 
    def tearDown(self): 

     for browser in self.browsers: 
      if browser == self.firefox: 
       print('firefox') 
       browser.close() 
       # browser.quit() 
      elif browser == self.chrome: 
       print('chrome') 
       browser.close() 
       # browser.quit() 

Ich weiß immer noch nicht die Antwort, aber ich denke, das ist ein Schritt in die richtige Richtung.

+0

Jetzt frage ich mich, ob die ursprüngliche Frage tatsächlich von @Dung und mir beantwortet wird. – Pat

+0

Dies ist nicht wirklich die Antwort auf die ursprüngliche Frage ... obwohl es eine Ausnahme vom Python Selenium 3.x Modul ist, von selen.browser.quit(). – RVT

+0

close() ist anders als quit() ... du kannst sie nicht einfach austauschen –

0

Es klingt, obwohl Ihre "try" -Klausel fehlschlägt, wodurch die Ausnahme gedruckt wird? Wahrscheinlich würde ich dem Exception-Catch mehr Debugging hinzufügen, zum Beispiel die Argumente für commit_tweet_to_database ausdrucken, nur um sicherzustellen, dass Sie brauchbare Parameter übergeben.