2011-10-14 24 views
0

從科裏·戈德堡這個開始:如何將所有參數轉換爲字符串字符串格式化

#!/usr/bin/env python 

import json 
import pprint 
import urllib2 


def get_stock_quote(ticker_symbol): 
    url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol 
    lines = urllib2.urlopen(url).read().splitlines() 
    return json.loads(''.join([x for x in lines if x not in ('// [', ']')])) 


if __name__ == '__main__': 
    quote = get_stock_quote('IBM') 
    print 'ticker: %s' % quote['t'] 
    print 'current price: %s' % quote['l_cur'] 
    print 'last trade: %s' % quote['lt'] 
    print 'full quote:' 
    pprint.pprint(quote) 

使用此:

import urllib2, json 

def get_stock_quote(ticker_symbol): 
    url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol 
    lines = urllib2.urlopen(url).read().splitlines() 
    #print lines 
    return json.loads(''.join([x for x in lines if x not in ('// [', ']')])) 



if __name__ == '__main__': 
    symbols = ('Goog',) 
    symbols2 = ('Goog','MSFT') 
    quote = get_stock_quote(symbols) 
    print 'ticker: %s' % quote['t'], 'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['ltt'] 
    print quote['t'], quote['l'], quote['ltt'] 

Usings符號的作品,symbols2不起作用。該錯誤消息是

類型錯誤:不串轉換過程中的所有參數格式

如何轉換的所有參數字符串中的字符串格式化。在瀏覽器中,工作的代碼是:Goog,MSFT。

編輯:我正在尋找的輸出是與goog,MSFT信息列表。

回答

1

在這種情況下,您可以:

import urllib2, json 

def get_stock_quote(ticker_symbol): 
    if isinstance(ticker_symbol, (list, tuple)): 
     ticker_symbol = ','.join(ticker_symbol) 
    url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol 
    lines = urllib2.urlopen(url).read().splitlines() 
    #print lines 
    return json.loads('[%s]' % ''.join([x for x in lines if x not in ('// [', ']')])) 

if __name__ == '__main__': 
    symbols = ('Goog',) 
    symbols2 = ('Goog','MSFT') 
    quotes = get_stock_quote(symbols2) 
    for quote in quotes: 
     print 'ticker: %s' % quote['t'], 'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['ltt'] 
     print quote['t'], quote['l'], quote['ltt'] 
+0

請測試代碼......它會導致新的錯誤。 – Merlin

+0

對不起,再試一次 – diegueus9

+0

還是有的,試試用symbols2,符號有效。 – Merlin

0

你得到這個錯誤,因爲格式化只需要一個字符串,而你把元組與2個字符串。如果你想獲得http://finance.google.com/finance/info?q=Goog,MSFT你應該做

quote = get_stock_quote(",".join(['Goog','MSFT'])) 

或者在週期做到這一點:

for symbol in ('Goog', 'MSFT'): 
    quote = get_stock_quote(symbol) 
0

的問題是在這裏:

url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol 

隨着symbols2,你提供一個2 -tuple,而格式操作符需要一個標量或一個元組。

下面將解決眼前的錯誤:

url = 'http://finance.google.com/finance/info?q=%s' % ",".join(ticker_symbol) 

這僅修復了問題的一半的:它分析的結果還需要修改代碼。我將這作爲練習給讀者。

+0

你的答案的後半部分:任何幫助 – Merlin

+0

使用JSON不familar。 – Merlin

2

您的問題是%s不能處理元組2個元素,請參閱下方例如:

>>> "=%s" % ('Goog',) 
'=Goog' 
>>> "=%s" % ('Goog','MSFT') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: not all arguments converted during string formatting 

無論如何,使用format()代替%

+0

'format()而不是%。 , 怎麼樣? – Merlin

+1

請參閱文檔:http://docs.python.org/library/stdtypes.html#str.format 特別注意這種字符串格式化方法是Python 3.0中的新標準,應該優先於%格式。 ..' – naeg

+0

使用python 2.7 – Merlin

相關問題