【问题标题】:Python - ValueError: invalid literal for int() with base 10: ''Python - ValueError:int() 的无效文字,基数为 10:''
【发布时间】:2015-05-08 08:41:28
【问题描述】:

求助,当我尝试从字符串中提取整数时,我不断收到 ValueError: invalid literal for int() with base 10: ''!

from string import capwords
import sys,os
import re

def parseint(List):
    newlist = [i for i in List if isinstance(i, int)]
    return newlist
def getint(string):
    number = [int(x) for x in string.split("-")]
    return number

file=open('./Class 1/usr_score.data','r')
text=file.read()

def get_num(x):
    return int(''.join(ele for ele in x if ele.isdigit()))

split = text.split(",")

split.sort(key = lambda k : k.lower())
for i in split:
    print(i)

print ('---------------------------------------')
list1=[]
for i in split:
    list1.append(str(i))

num_list1=[]

for i in list1:
    ints = re.findall(r'\b\d+\b', i)

    #ints = getint(i)[0]
    for i in ints:
        int1=i
    num_list1.append(i)

    #num_list1 = parseint(list1)

num_list=num_list1


for i in num_list:
    print(i)

文件 usr_score.data 包含:

user-1,aaa-1,usr-3,aaa-4,

我的代码是它包含游戏的分数,我希望我的程序按字母顺序对它们进行排序。有人可以解决我的问题吗?

注意:程序中的部分代码没有使用。

【问题讨论】:

  • 最好不要为变量使用字符串和拆分之类的名称,因为它们会影响这些名称的原始含义。

标签: python list python-3.x


【解决方案1】:

您的输入数据末尾有一个“,”,这会导致 split() 除了分数之外生成一个空字符串:

['user-1', 'aaa-1', 'usr-3', 'aaa-4', '']

int('') 不起作用;你应该删除那个空字符串,或者处理它。

【讨论】:

    【解决方案2】:

    int() 不能接受空字符串,这是一个无效的参数。将字符串作为 int 获取时,您需要测试它是否为空。你可以在这样的列表理解中做到这一点:

    [int(x) if not (x.isspace() or x == '') else 0 for x in string.split("-")]
    

    如果您愿意,可以用 None 或其他结果替换 0,但这基本上总是使用 string.isspace() 函数检查字符串是否只是空白字符,并确保 x 不是空字符串。

    【讨论】:

      猜你喜欢
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2021-08-06
      • 2018-09-05
      • 2021-12-18
      相关资源
      最近更新 更多