【问题标题】:Invalid literal for int with base 10以 10 为底的 int 的文字无效
【发布时间】:2014-09-02 01:36:06
【问题描述】:

运行代码第 49 行时出现此错误,在 total_energy last_digit+=int(dig) ValueError: invalid literal for int() with base 10:'

def total_energy(data):
    last_digit=0
    lines= data.split('\n')

for line in lines:
    if len(line)>6:
        your_digits=line[-15:].split(',')

    for dig in your_digits:
         last_digit+=int(dig)

print last_digit

我也试过 float 但同样的错误。 http://pastebin.com/1UpzeAgD 这是代码正在处理的数据。 任何帮助都会很棒!

【问题讨论】:

  • 您正在尝试将非整数字符串转换为整数。例如,如果您尝试执行int('a'),您将收到错误“Invalid literal for int with base 10”。检查 your_digits 并打印出来。
  • 提示:当您尝试使用 int("") 将空字符串转换为整数时会发生什么?
  • 您应该使用csv 模块来解析逗号分隔值的文件;)
  • try: last_digit += int(dig) // except: print your_digits 并发布打印的内容
  • 我发现亚当说它得到一个空字符串,我认为错误在于 'your_digits=line[-15:].split(',')' 部分。我对csv模块也不熟悉

标签: python


【解决方案1】:

在您的原始数据中:

line89: 06:28,9.1,2.3,0,0,0,0,30,0,0,89,0
line90: 06:29,9.1,2.7,0,0,0,0,0,0,0,87,0

当您尝试使用 int('') 解析第 90 行时遇到此错误。如您所见,第 90 行中的数据长度较短,这使得代码中的 line[-15:] 返回意外结果。

您必须修改获取 your_digits 的方式。

试试这个:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

f = open('data_printed.txt', 'r')
data = f.read()
f.close()

last_digit=0
lines= data.split('\n')
for line in lines:
    if len(line)>6:
        your_digits=line.split(',')[-7:]  # here to get last 7 elements you want
    for dig in your_digits:
        last_digit+=int(dig)

print last_digit

告诉我它是否有效。

【讨论】:

  • @user3491814 你能告诉我这次是什么错误吗?一样吗?
  • 在第 51 行,total_energy last_digit += int(dig) ValueError: invalid literal for int() with base 10: ''
  • @user3491814 你能给我第51行的内容吗?从我这边看来还可以。
  • 等一下!对不起,我正在执行我的旧代码:((你的代码有效!
  • @user3491814 哈哈。所以不要忘记接受它作为答案。 :)
【解决方案2】:
import csv

answer = 0
with open('path/to/file') as infile:
    for line in csv.reader(infile, delimiter=','):
        nums = (int(i) for i in line[3:])
        answer += sum(nums)
print answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2020-01-04
    • 2010-12-22
    • 2011-07-07
    • 2019-10-14
    相关资源
    最近更新 更多