Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-如何优雅地处理TypeError?_Python_Debugging_Error Handling_Split_Typeerror - Fatal编程技术网

Python-如何优雅地处理TypeError?

Python-如何优雅地处理TypeError?,python,debugging,error-handling,split,typeerror,Python,Debugging,Error Handling,Split,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))) 此处提供了完整的代码(尽管不必全部提供): 当我在终

以下是我的代码摘录:

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)))
此处提供了完整的代码(尽管不必全部提供):

当我在终端中调用我的函数时,我将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
C:\Users\Simon\PC\Test>python GetAlexRanking.pyhttp://www.estamos.es
http://www.estamos.es
回溯(最近一次呼叫最后一次):
文件“GetAlexRanking.py”,第193行,在
打印(“%s:%d”%(p.\u类\uuuuuuu.\uuuuu名称\uuuuu,p.get\u排名(url)))
类型错误:%d格式:需要数字,而不是非非类型
我怎样才能优雅地处理这件事?我希望的行为是,如果
AlexaTrafficRank()或GooglePageRank()方法中的任何一个失败,那么我希望返回一个“?”而不是一个数字。如何完成此操作?

首先存储
p.get\u 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 '?'))
可能重复的