我正在查询twitter api并将我想要的返回值加载到变量
中 gotdata = data.values()[1][10]['text']
但是,当应用程序崩溃时,此行会显示在日志中 如何使此分配正常失败,以便应用程序在失败时不会崩溃?
答案 0 :(得分:0)
首先,您需要扩展错误。在此示例中,我正在扩展TypeError
:
# NotIntError is raised if the item is not an integer
class NotIntError(TypeError):
msg=""
# Constructor or Initializer
def __init__(self,wrongInput):
self.msg=str(wrongInput)+" is not an integer."
# __str__ is to print the value
def __str__(self):
return self.msg
然后,使用它:
def encodeB32(self,string):
try:
if type(string)!=type(""):
raise NotStringError(string)
return base64.b32encode(string)
except NotStringError as e:
return self.name+" has issued a new error: "+str(e)
这将使用try
- except
语句在编码之前检查变量string
是否为字符串。请记住,这只是一个示例,但您可以轻松修改它以适合您的使用。
答案 1 :(得分:0)
正如Matias Cicero所说,你假设从twitter获得的数据过多(即使用dict的值),但是pythonic处理这个问题的方法是首先尝试并稍后提问,所以真的是什么你应该做的是处理异常:
gotdata = None
try:
gotdata = data.values()[1][10]['text']
except Exception as e:
# do something with your exception
print(str(e))
上面的代码有什么问题,它假设了一些东西,比如你要去查看gotdata
是不是没有,当你去使用它时,你不关心什么样的异常被提出来了。
数据可能没有名为values
的属性,或者data.values()可能没有任何项目。
为了对抗这种不确定性,你可以将异常级联起来:
gotdata = None
try:
gotdata = data.values()[1][10]['text']
except IndexError:
print("some IndexError occured")
except Exception as e:
# do something with your exception
print(str(e))
通过这种方式,我们可以看到错误是否是IndexError或其他内容,并采取相应的行动。
最后一件事情更多的是一个使用问题,如果你从api获得一个字典,通常很好的做法是不要使用values()将字典视为列表,因为字典的顺序不能保证。
您应该检查项目的键或值,以确定如何处理它。
所以,data.values()[1]...
您应该使用item = data['keyofthethingyouwant']
或item = data.get('keyofthethingyouwant')
这样的内容,然后从item
中获取项目,然后检查错误。
答案 2 :(得分:0)