Python 以 10 为底的 int() 的无效文字:'.'

Python invalid literal for int() with base 10: '.'

我是初学者,我正在尝试获取文件每一行的最后一个元素的总和。谁能告诉我哪里出了问题?

def sumLastElement(file):    
    f = open(file, "r").read()
    evenNumbers = []    
    for line in f:
        lastElement = line[-1]
        if int(lastElement):
            try:
                lastElement % 2 == 0
                evenNumbers.append(lastElement)
            except:
                pass    
    return sum(evenNumbers)
    f.close()
  1. 您尝试在以下语句中将字符串字符转换为整数

    int(lastElement)

  2. 代码中 lastElement 变量的 print

    例如print "Value of lastElement:-", lastElement

  3. lastElement % 2 == 0 将不起作用,因为 stringlastElement 变量的类型,因此此语句将引发 TypeError 异常。

  4. return语句之后没有语句会运行,在代码文件中关闭f.close()return语句之后。

  5. 使用if循环检查%运算的结果是否等于0lastElement % 2 == 0 这将 return True 或 False 值,因此每个 lastElement 将附加在列表中

例如

>>> if lastElement % 2 == 0:
...   evenNumbers.append(lastElement)

例如例外

>>> int("a")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a'
>>> int("5")
5
>>> 

使用异常处理捕获值错误:-

>>> try:
...   lastElement = int(line[-1])
... except ValueError:
...   print "Exception during type casting for input %s"%(line[-1])
...   continue

您正在尝试将字符串转换为整数:

if int(lastElement)

所以它给出了错误。您可以将此行放在 try 块中以消除错误。

 def sumLastElement(file):    
    f = open(file, "r").read()
    evenNumbers = []    
    for line in f:
        lastElement = line[-1]

          try:
             if int(lastElement):
                lastElement % 2 == 0
                evenNumbers.append(lastElement)
          except:
                pass    
    return sum(evenNumbers)
    f.close()

您的代码中有几个问题。

首先,永远不会达到f.close(),因为超过return就会退出函数。如果您开始使用 with open() as instead 可能会更好(完成后它会自动关闭文件)。

It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way.

其次,如果一行中的最后一个字符不能转换为int,则会引发ValueError

使用 try: 时,您应该只处理预期的错误。所有其他错误都应该通过您的代码传播,以便您 知道 什么时候出了问题。


以下是您的代码的改进版本。

def sumLastElement(file):

    with open(file, 'r') as opened_file:
        evenNumbers = []

        for line in opened_file:
            lastElement = line.replace('\n', '')[-1]

            try:
                element_as_int = int(lastElement)
                if element_as_int % 2 == 0:
                    evenNumbers.append(element_as_int)
            except ValueError:
                pass

        return sum(evenNumbers)

要在每行中捕获多个连续数字,我宁愿使用 regular expressions:

import re


def sumLastElement(file):

    with open(file, 'r') as opened_file:
        evenNumbers = []

        for line in opened_file:

            lst_of_matches = re.findall(r'\d+$', line)
            if lst_of_matches:
                matched_as_int = int(lst_of_matches[-1])
                if matched_as_int % 2 == 0:
                    evenNumbers.append(matched_as_int)
        return sum(evenNumbers)

r'\d+$' 是您在 line 字符串中搜索的模式。 r'blabla' 是原始字符串,\d 表示一个数字,+ 表示前面的一个或多个(即一个或多个 \d),最后 $匹配行尾。