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()
您尝试在以下语句中将字符串字符转换为整数
int(lastElement)
代码中 lastElement
变量的 print
值
例如print "Value of lastElement:-", lastElement
lastElement % 2 == 0
将不起作用,因为 string
中 lastElement
变量的类型,因此此语句将引发 TypeError
异常。
在return
语句之后没有语句会运行,在代码文件中关闭f.close()
在return
语句之后。
使用if
循环检查%
运算的结果是否等于0
。
lastElement % 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
),最后 $
匹配行尾。
我是初学者,我正在尝试获取文件每一行的最后一个元素的总和。谁能告诉我哪里出了问题?
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()
您尝试在以下语句中将字符串字符转换为整数
int(lastElement)
代码中
lastElement
变量的print
值例如
print "Value of lastElement:-", lastElement
lastElement % 2 == 0
将不起作用,因为string
中lastElement
变量的类型,因此此语句将引发TypeError
异常。在
return
语句之后没有语句会运行,在代码文件中关闭f.close()
在return
语句之后。使用
if
循环检查%
运算的结果是否等于0
。lastElement % 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
),最后 $
匹配行尾。