如何继续 try/except
How to continue a try/except
我目前正在学习“try”和“except”的概念,但我有一个小问题。
def sum_file():
try:
with open("text.txt") as entry:
result = 0
try:
for line in entry:
result += int(line.strip())
print(result)
except ValueError:
print("Non-integer number entered")
except:
print("Non-existent file.")
文件的每一行都是一个数字,有些数字是整数,有些是浮点数。代码正确地对第一个整数求和,但是当第一个浮点数出现时程序停止,当有更多行时。如何修改代码使其继续运行?
您需要将第二个 try
块放入循环中:
def sum_file():
try:
with open("text.txt") as entry:
result = 0
for line in entry:
try:
result += int(line.strip())
print(result)
except ValueError:
print("Non-integer number entered")
except:
print("Non-existent file.")
或者您可以使用 re 来帮助您。
re.match(r".*\D+.*", line)
匹配任何包含一个或多个 not [0-9] 字符的行
from io import StringIO
import re
text_txt = """\
3.1
123
4 b 5 6
7.2
c'] ? 9
10
"""
def sum_file():
with StringIO(text_txt) as f:
result_list = []
for line in [_.strip() for _ in f]:
m = re.match(r".*\D+.*", line)
print("Non-integer number entered") if m else (print(line), result_list.append(int(line)))
print(f'result: {sum(result_list)}') if result_list else None
sum_file()
输出
Non-integer number entered
123
Non-integer number entered
Non-integer number entered
Non-integer number entered
10
result: 133
我目前正在学习“try”和“except”的概念,但我有一个小问题。
def sum_file():
try:
with open("text.txt") as entry:
result = 0
try:
for line in entry:
result += int(line.strip())
print(result)
except ValueError:
print("Non-integer number entered")
except:
print("Non-existent file.")
文件的每一行都是一个数字,有些数字是整数,有些是浮点数。代码正确地对第一个整数求和,但是当第一个浮点数出现时程序停止,当有更多行时。如何修改代码使其继续运行?
您需要将第二个 try
块放入循环中:
def sum_file():
try:
with open("text.txt") as entry:
result = 0
for line in entry:
try:
result += int(line.strip())
print(result)
except ValueError:
print("Non-integer number entered")
except:
print("Non-existent file.")
或者您可以使用 re 来帮助您。
re.match(r".*\D+.*", line)
匹配任何包含一个或多个 not [0-9] 字符的行
from io import StringIO
import re
text_txt = """\
3.1
123
4 b 5 6
7.2
c'] ? 9
10
"""
def sum_file():
with StringIO(text_txt) as f:
result_list = []
for line in [_.strip() for _ in f]:
m = re.match(r".*\D+.*", line)
print("Non-integer number entered") if m else (print(line), result_list.append(int(line)))
print(f'result: {sum(result_list)}') if result_list else None
sum_file()
输出
Non-integer number entered
123
Non-integer number entered
Non-integer number entered
Non-integer number entered
10
result: 133