任务描述
本关任务:编写代码求列表内所有元素的和。
相关知识
为了完成本关任务,你需要了解什么是异常以及异常的处理方式。
异常
我们在编写代码时,难免会出现代码写错或者方法、参数使用错误的情况,在运行代码的时候,也有可能发生错误,发生的错误也就是我们所说的异常。下面我们列举几个常见的异常:
- ImportError,无法引入模块或包,大部分是路径问题或名称错误;
- IOError,输入输出异常,大部分是无法打开文件;
- TypeError,传入对象类型与要求的不符合;
- NameError,使用一个还未被赋予对象的变量;
- ValueError,传入一个调用者不期望的值,即使值的类型是正确的;
- KeyError,尝试访问字典里不存在的键;
- SystemError,一般的解释器系统错误。
异常处理
考虑到程序的健壮与容错性,我们需要对潜在的异常进行处理,防止因异常而导致的程序崩溃。最常用的的异常处理方式就是使用 try…except… 语句。
try:
代码块1
except:
代码块2
当执行代码块 1 发生错误时,停止运行代码块 1,开始运行代码块 2。except 后也可以指定异常类型。
try:
num = "1" + 1 # 会发生TypeError错误
print(num)
except TypeError: # 只有发生TypeError时才运行except子句
print("发生TypeError错误")
try:
num = 10 * (1/0) # 不会发生TypeError错误
print(num)
except TypeError:
print("发生TypeError错误")
执行结果:
发生TypeError错误
Traceback (most recent call last):
File "sync_file.py", line 8, in <module>
num = 10 * (1/0)
ZeroDivisionError: division by zero
由于没有匹配到指定的错误,所以程序还是报错了。
扫描二维码关注公众号,回复:
15033072 查看本文章
这些还不足以满足我们的需求,在一些自动化的代码中,我们想让代码生成错误日志,保存详细的错误信息,但是又不会停止代码的运行,这时,我们可以使用下列代码:
try:
num = "1" + 1 # 会发生TypeError错误
print(num)
except TypeError as f:
print("发生TypeError错误,错误内容为:%s"%f)
执行结果:
发生TypeError错误,错误内容为:can only concatenate str (not "int") to str
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示在 Begin-End 之间编写程序代码。相关信息如下:
- 使用 input 获取列表;
- 列表内的元素不一定全部都是数字,也有可能是其它类型的数据,如果是其它类型的数据,则不对该元素进行求和计算或者令该元素等于 0;
- 打印计算后的结果。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧 “测试结果”区查看具体的测试集详情。 测试输入:
["a","b",[1,2,3],2,3,5]
预期输出:
10
实现代码:
# 请在下面的 Begin-End 之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 计算列表内所有数字的和
a=eval(input())
b=0
for x in a:
try:
b+=x
except:
continue
print(b)
########## End ##########