Python异常处理问题

img

输出结果:

img

我自己写的代码:

/usr/bin/env python
# _*_ coding:utf-8 _*_
import re

try:
    alist = ['12', '23', '-', '1.2', '35Y', '2.3', '---']
    total = 0
    errors = []
    digits = re.compile(r'-?\d+\.?\d*e?-?\d*?')  # 所有数值型数据
    letters = re.compile(r'[A-Za-z]')  # 所有字母
    for i, v in enumerate(alist):
        # 查找包含数字不包含字母的项
        number = digits.search(v)
        letter = letters.search(v)
        if number and not letter:
            continue
        # 不符合数值型数据的从原列表弹出
        errors.append(alist.pop(i))
    print(*alist, sep='+', end='=')
    # 将字符串转换成浮点型数据计算总和
    alist = list(map(float, alist))
    total = sum(alist)
    print(total)
except TypeError:
    pass  # 无操作
else:
    # 如果无异常,打印
    print('列表中', errors, '不是数值型数据!')

运行结果跟题目给的一样

img

上面是我自己写的,请问有没有更好的方法把代码量减小呢?
想知道参考代码11行是怎么做的

代码已修改

alist = ['12', '23', '-', '1.2', '35Y', '2.3', '---']
errors = []
for i, v in enumerate(alist):
    # 将alist列表里各项进行类型转换
    try:
        alist[i] = float(v)
    # 遇到异常则将该项跳出加入errors列表
    except ValueError:
        errors.append(alist.pop(i))
# 计算总数
total = sum(list(map(float, alist)))
print(*alist, sep='+', end='=')
print(total)
print('列表中', errors, '不是数值型数据!')

你这代码里哪句话可能引起异常啊,你这try完全是个形式主义啊
try应该写在循环里面,循环里不再需要判断类型,直接都按数值进行转换,转换不成功就会抛错误,抛了错误就把错误的数据添加进list
不要把try包到循环外面,这样完全是个形式主义
此外,alist 本身是个list,你直接for x in alist就行了,不要类型转换来转换去的,越转换越复杂