2014-02-27 134 views
0

這裏是從我的代碼的摘錄:Python - 如何優雅地處理TypeError?

if __name__ == "__main__": 
    url = sys.argv[1] 
    providers = (AlexaTrafficRank(), GooglePageRank(),) 

    print((url)) 
    for p in providers: 
     print("%s:%d" % (p.__class__.__name__, p.get_rank(url))) 

完整的代碼可以在這裏(不過,不是所有的必要):LINK

當我打電話給我的終端功能,我通過一個URL作爲這個函數的參數。對於大多數的網址,將很好地工作,如:

C:\Users\Simon\PC\Test>python GetAlexRanking.py http://www.test.es 
http://www.test.es 
AlexaTrafficRank:17817109 
GooglePageRank:2 

然而,當我調用該函數的一些網址,我得到以下錯誤:

C:\Users\Simon\PC\Test>python GetAlexRanking.py http://www.estamos.es 
http://www.estamos.es 
Traceback (most recent call last): 
    File "GetAlexRanking.py", line 193, in <module> 
    print("%s:%d" % (p.__class__.__name__, p.get_rank(url))) 
TypeError: %d format: a number is required, not NoneType 

我如何處理這個優雅?我想要的行爲將是如果AlexaTrafficRank() or GooglePageRank()方法失敗,然後我想'?'返回而不是數字。我怎樣才能做到這一點?

+0

[Python中的可能重複 - 處理值錯誤](http://stackoverflow.com/questions/22080983/python-handling-value-errors) – jonrsharpe

回答

1

商店p.get_rank(url)值,然後再測試:

for p in providers: 
    rank = p.get_rank(url) 
    if rank is not None: 
     print("%s:%d" % (p.__class__.__name__, rank)) 

,或者因爲排名僅僅是一個整數,則可以使用布爾邏輯和%s

for p in providers: 
    print("%s:%s" % (p.__class__.__name__, p.get_rank(url) or '?')) 
相關問題