以下是我的代码摘录:
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作为参数传递给此函数。对于大多数URL,它将完美地工作,例如:
C:\Users\Simon\PC\Test>python GetAlexRanking.py http://www.test.es
http://www.test.es
AlexaTrafficRank:17817109
GooglePageRank:2
但是,当我使用某些URL调用该函数时,出现以下错误:
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 :(得分: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))
或者,由于rank只是一个整数,你可以使用布尔逻辑和%s
:
for p in providers:
print("%s:%s" % (p.__class__.__name__, p.get_rank(url) or '?'))