如何在python中编写错误处理程序

时间:2018-01-24 00:21:08

标签: python flask

我正在查询twitter api并将我想要的返回值加载到变量

 gotdata = data.values()[1][10]['text']

但是,当应用程序崩溃时,此行会显示在日志中 如何使此分配正常失败,以便应用程序在失败时不会崩溃?

3 个答案:

答案 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)

使用

try:
    ...
except <Exception>:
    ...

https://docs.python.org/2/tutorial/errors.html