Python 为什么我会得到一个';非类型';非';非类型';?

Python 为什么我会得到一个';非类型';非';非类型';?,python,sqlite,pandas,nonetype,Python,Sqlite,Pandas,Nonetype,我有一系列函数,它们获取一个数据帧,清理数据,然后将数据发送到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',

我有一系列函数,它们获取一个数据帧,清理数据,然后将数据发送到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”对象不可编辑

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

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

2) 数据被发送到sqlite数据库,我对此进行了验证。这意味着数据也不在那里

为什么会出现此错误?我的数据何时会变成
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

您没有从函数返回任何内容,但需要一个包含两个项的元组
(df,event\u name)

调用函数时:

df, event_name = send_to_db(df, event_name)
您希望返回2项的元组

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

您需要修改函数以添加:

return df, event_name
更新:如果确实不需要函数的返回值,则不要使用赋值语句左侧的任何内容调用函数。这意味着从函数结果中解包元组。只需按如下方式调用函数:

send_to_db(df, event_name)
请参阅:其中说明:

这被称为顺序解包(sequenceunpacking)并适用于 右边的任何序列。序列解包需要 左侧的变量列表,其元素数与 序列的长度。请注意,多重赋值确实非常重要 只是元组打包和序列解包的组合


您没有从函数返回任何内容,但需要一个包含两个项的元组
(df,event\u name)

调用函数时:

df, event_name = send_to_db(df, event_name)
您希望返回2项的元组

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

您需要修改函数以添加:

return df, event_name
更新:如果确实不需要函数的返回值,则不要使用赋值语句左侧的任何内容调用函数。这意味着从函数结果中解包元组。只需按如下方式调用函数:

send_to_db(df, event_name)
请参阅:其中说明:

这被称为顺序解包(sequenceunpacking)并适用于 右边的任何序列。序列解包需要 左侧的变量列表,其元素数与 序列的长度。请注意,多重赋值确实非常重要 只是元组打包和序列解包的组合


请提供回溯,以便我们能够清楚地看到错误及其发生的位置。请提供回溯,以便我们能够清楚地看到错误及其发生的位置。我需要这样做,即使我不需要返回任何内容?我只需要将数据发送到db,然后for循环移动到我需要处理的下一个事件。这就是调用函数的方式。Yes@Meepl:不,当然,如果您不需要返回任何内容,则不需要执行此操作…但是您不能使用不存在的返回值。只需将其称为
send\u to\u db(df,event\u name)
而不是
df,event\u name=send\u to\u db(df,event\u name)
。即使我不需要返回任何内容,我也需要这样做?我只需要将数据发送到db,然后for循环移动到我需要处理的下一个事件。这就是调用函数的方式。Yes@Meepl:不,当然,如果您不需要返回任何内容,则不需要执行此操作…但是您不能使用不存在的返回值。只需将其称为
send\u to\u db(df,event\u name)
而不是
df,event\u name=send\u to\u db(df,event\u name)