【solved】OverflowError: Python int too large to convert to C long.

解决报错OverflowError: Python int too large to convert to C long.

问题描述

问题代码如下:

	TEXT = torchtext.data.Field(sequential=True)
    LABEL = torchtext.data.Field(sequential=False, dtype=torch.long, use_vocab=False)

    #使用TabularDataset方法生成数据集
    # 读取文件生成数据集
    fields = [('label', LABEL), ('comment', TEXT)]
    train, valid, test = TabularDataset.splits(
        path='/root/For+Detecting+sentiment+polarity/lstm/', format='csv',
        train='train_data.csv',
        validation="valid_data.csv",
        test='test_data.csv',
        skip_header=True, fields=fields)

运行时出现报错:

OverflowError: Python int too large to convert to C long.

问题分析:

根据提示可知,是发生了溢出错误,即问题数字超过了系统支持的最大数值表示sys.maxsize
在这里插入图片描述
但是更换数据集之后还是一样的报错,所以猜想可能是torchtext版本问题。

解决方法:

搜索了很多解决方法,发现,其实有可能是torchtext的版本问题。
最开始报错时使用的torchtext版本好像是0.4.0,降低版本改成0.2.3就不会报错了。
但是版本为0.2.3时torchtext.data.Field不支持dyte参数。
去官网查了一下pytorch和torchtext的对应版本,我的pytorch是1.9,解释器python3.8,对应的torchtext版本为0.10.0,于是又把torchtext更新为0.10.0,此时不会再报错,但是会发现0.10.0版本的torchtext没有Field,其实是放在了别的package里,把所有的torchtext.data改为torchtext.legacy.data就可以了。代码更新如下:

TEXT = torchtext.legacy.data.Field(sequential=True)
    LABEL = torchtext.legacy.data.Field(sequential=False, dtype=torch.long, use_vocab=False)

    #使用TabularDataset方法生成数据集
    # 读取文件生成数据集
    fields = [('label', LABEL), ('comment', TEXT)]
    train, valid, test = TabularDataset.splits(
        path='/root/For+Detecting+sentiment+polarity/lstm/', format='csv',
        train='train_data.csv',
        validation="valid_data.csv",
        test='test_data.csv',
        skip_header=True, fields=fields)

问题解决。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值