Python如何优雅地处理TypeError?

2024-07-03 05:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的代码摘录:

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()方法中的任何一个失败,那么我想要一个“?”返回的不是数字。我怎样才能做到这一点?你知道吗


Tags: 代码nameinpyhttpurleswww
1条回答
网友
1楼 · 发布于 2024-07-03 05:49:28

首先存储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 '?'))

相关问题 更多 >