2016-11-02 69 views
0

我收到錯誤:得到錯誤Nonetype在Python 2.7

Traceback (most recent call last): 
    File "<stdin>", line 9, in <module> 
AttributeError: 'NoneType' object has no attribute 'get' 

是不是有什麼毛病下面的腳本?我在腳本中使用get(),因爲Mongodb集合中缺少一些手機字段名稱。

樣本數據:

{ 
    "_id": ObjectID("57e99f88b948da6c3be04366"), 
    "email": "[email protected]", 
    "phone": [ 
     { 
      "type": "Mobile", 
      "number": "250-851-1041" 
     } 
    ]} 

的python腳本:

import codecs 
import csv 
cursor = db.users.find ({}, {'_id':1, 'email': 1, 'phone.type':1, 'phone.number':1}) 
with codecs.open('applicatonmethod3.csv', 'w', encoding='utf-8') as outfile:   
     fields = ['_id', 'email', 'phone.type', 'phone.number'] 
     write = csv.DictWriter(outfile, fieldnames=fields) 
     write.writeheader()  
     for x in cursor: 
      x_id = x.get('_id') 
      x_email = x['email']    
      y = x.get('phone')    
      z = {'_id': x_id, 
       'email': x_email, 
       'phone.type': y.get('type'), 
       'phone.number': y.get('number')}        
      write.writerow(z) 

請有人能幫助我。

+0

運行它通過調試器或打印的東西。對於初學者來說,只需在for循環中使用print(x)。 –

+0

錯誤意味着'x'是'None',這意味着'cursor'包含'None'。找出爲什麼發生。 – kindall

+0

我檢查了一些行中沒有電話字段名稱的集合中的數據。這就是爲什麼我使用get()來跳過它們。謝謝 – user7070824

回答

1

您是否已連接到正確的數據庫,該數據庫包含用戶集合,而不僅僅是默認數據庫?

+0

是的,我通過使用pymongo連接到正確的數據庫。 – user7070824

+0

https://ubuntuforums.org/showthread.php?t=2262024按照這個鏈接它可能會幫助你不確定,只是試一試 –

+0

謝謝,我會去看看它。 – user7070824

0

我解決了這個問題。我只是與你分享。這裏是解決方案。感謝您的幫助。

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
import codecs 
import csv 
cursor = db.users.find ({}, {'_id':1, 'phone.type':1, 'phone.number':1, 'phone.extension':1}) 
with codecs.open('phone.csv', 'w', encoding='utf-8') as outfile:   
     fields =['_id', 'phone.type', 'phone.number', 'phone.extension'] 
     write = csv.DictWriter(outfile, fieldnames=fields) 
     write.writeheader()  
     for x in cursor: 
      x_id = x['_id']           
      for y in x.get('phone', {}):                   
       z = {'_id': x_id,          
        'phone.type': y.get('type'), 
        'phone.number': y.get('number'), 
        'phone.extension': y.get('extension')} 
       print z                        
       write.writerow(z) 

cursor.close()