我的程序应该从互联网上下载一个文件,然后根据某些因素(如年龄,工作等)来猜测一个人的工资。在我看来,它不是让我把字符串变成一个int我需要做的。因为我还是python的新手,所以任何帮助都会受到赞赏。主要错误发生在这里:
below_count = 0
for row in myfile:
if ages_midpoint > int(row[0]):
count_below50+=1
错误是:
ValueError: invalid literal for int() with base 10: ''
答案 0 :(得分:2)
错误消息告诉您确切的错误。
for
.. in
循环文本文件,则表示值row
是一个字符串(文件中的一行)。row[0]
这是字符串的第一个字符。[0]
会抛出异常),这不是十进制数的合法表示。你需要回到你真正想要做的事情并重新思考如何去做,因为这不是。
答案 1 :(得分:0)
row [0]的值是一个空字符串。您可以通过在命令行解释器上执行以下操作来重新创建错误...
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
您可能想要验证存储在行中的值。 if row:
会做到这一点。
遗憾的是,您的帖子中没有足够的信息可以为您提供更多帮助。代码行if ages_midpoint > int(row[0]):
非常可疑。行是文本文件中的一行文本,如果是这样,row [0]将返回第一个字符...可能不是你想要的。使用字符串拆分函数word = row.split(<charToSplitOn>)[0]
答案 2 :(得分:0)
这可能会有所帮助。
>>> int('3')
3
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
因此,您可以删除任何空格并放置try..catch
。
below_count = 0
for row in myfile:
try:
if ages_midpoint > int(row.strip()[0]):
count_below50+=1
except ValueError:
# row[0] is not an integer character
# do something here
pass