为什么我在不是'NoneType'的数据上遇到'NoneType'类型错误?

时间:2015-05-18 00:38:25

标签: python sqlite pandas nonetype

我有一系列带有pandas数据帧的函数,清理数据然后将其发送到sqlite db。

以下函数正在创建错误:

def send_to_db(df, event_name):

    print df.describe()

    table_names = {
        'Video Played': 'video_played',
        'Item Information Click': 'item_info_click',
        'Faved': 'faved',
        'Add to Cart': 'add_to_cart',
        'Tap to Replay': 'replay'
    }

    print table_names.get(event_name)

    con = db.connect('/Users/metersky/code/mikmak/vid_score/test.db')
    df.to_sql(table_names.get(event_name), con, flavor='sqlite', if_exists='append')
    con.close()

我得到的错误是TypeError: 'NoneType' object is not iterable

这对我来说很奇怪,原因有两个:

1)print df.describe()为我提供了正确的pandas输出,这意味着函数中该点的数据不是None

2)数据被发送到我验证的sqlite数据库。所以这意味着数据也不是None

为什么我收到此错误,我的数据何时变为None

回溯:

Traceback (most recent call last):
  File "fetch_data.py", line 139, in <module>
    df, event_name = send_to_db(df, event_name)
TypeError: 'NoneType' object is not iterable

这就是我调用函数的方式:

for event in event_types:
    print event
    df, event_name = get_data(start_date, end_date, event)

    print "*********" + event_name + " data retrieved"

    df, event_name = data_cleanse(df, event_name)

    print  "*********" + event_name + " data cleansed"

    df, event_name = send_to_db(df, event_name)

    print  "*********" + event_name + " data sent to db"

1 个答案:

答案 0 :(得分:6)

从你的函数中返回任何内容但是期待一个2项(df, event_name)的元组:

当你打电话给你的职能时:

df, event_name = send_to_db(df, event_name)

你期望得到一个2项的元组。

但是,您的函数会隐式返回None,因为没有非空的return语句

您需要修改要添加的功能:

return df, event_name

更新:如果确实不需要您的功能返回值,那么请不要使用任何内容调用您的函数赋值语句的左侧。这意味着元组从函数的结果中解包。只需按照以下方式调用您的函数:

send_to_db(df, event_name)

请参阅:Python Packing and UnpackingTuples and Sequences,其中包含:

  

这足够恰当地称为序列解包并且适用于   右侧的任何序列。序列拆包需要   左边的变量列表具有相同数量的元素   序列的长度。请注意,实际上是多次分配   只是元组打包和序列解包的组合。