2015-04-27 2 views
1

У меня есть словарь и я пытаюсь записать данные в файл currencies.csv, используя этот код: код для словарясохранение словаря в CSV файл

def _fetch_currencies(): 
    response =urllib.request.urlopen('http://www.maths.manchester.ac.uk/~vsego/python/currencies.json') 
    html = response.read().decode("utf-8") 

    currencies = json.loads(html) 
    pprint(currencies) 

def _save_currencies(currencies): 
    with open(('currencies.csv'), 'wt') as my_csv: 
     csv_writer = csv.writer(my_csv, delimiter=',') 
     csv_writer.writerow(["code","name"]) 
     for key,value in currencies.items(): 
      csv_writer.writerow([key,value]) 

_save_currencies(_fetch_currencies()) 

, когда я вернуть код I получите сообщение об ошибке

'AttributeError: 'NoneType' object has no attribute 'items'' 

Как исправить эту ошибку?

+1

что валюты? –

+0

Мой Python немного ржавый, но '_fetch_currencies()' ничего не возвращает. Таким образом, вызов к ней должен оцениваться как «null» или «NoneType» соответственно, и это то, что передается '_save_currencies()'. Поскольку 'NoneType' не имеет метода' items() ', генерируется исключение. –

ответ

1

Вы должны вернуться в _fetch_currencies():

def _fetch_currencies(): 
    response =urllib.request.urlopen('http://www.maths.manchester.ac.uk/~vsego/python/currencies.json') 
    html = response.read().decode("utf-8") 
    return json.loads(html) # <- return 

Вы не возвращает никакого значения, так по умолчанию питона возвращает None поэтому, когда вы проходите _fetch_currencies() к _save_currencies вы передаете None.

Вы также можете пройти dict.items и вызвать csv.writerows:

def _save_currencies(currencies): 
    with open(('currencies.csv'), 'wt') as my_csv: 
     csv_writer = csv.writer(my_csv, delimiter=',') 
     csv_writer.writerow(["code","name"]) 
     csv_writer.writerows(currencies.items()) 
0

Ошибка в том, что вы запрашиваете ключи из словаря, который не имеет никаких. Причина в том, что _fetch_currencies() не имеет оператора return.

def _fetch_currencies(): 
    response =urllib.request.urlopen('http://www.maths.manchester.ac.uk/~vsego/python/currencies.json') 
    html = response.read().decode("utf-8") 

    currencies = json.loads(html) 
    return currencies 

Несмотря на это, это должно работать:

currencies = {} 
for key,value in currencies.items(): 
    print key, value 

Если это не будет работать:

currencies = None 
for key,value in currencies.items(): 
    print key, value 
Смежные вопросы