文章目录
- try…except
语法:
try:
<语句> #运行别的代码
except <异常类型>:
<语句> #如果在try部份引发了'name'异常
except <异常类型> as <数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
注:
python2 和 3 处理 except 子句的语法有点不同,需要注意;
Python2
try:
print (1/0)
except ZeroDivisionError, err: # , 加原因参数名称
print ('Exception: ', err)
Python3
try:
print (1/0)
except ZeroDivisionError as err: # as 加原因参数名称
print ('Exception: ', err)
例
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
print("内容写入文件成功")
fh.close()
输出
内容写入文件成功
注:
异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。(异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正)
# 未捕获到异常,程序直接报错
s1 = 'hello'
try:
int(s1)
except IndexError as e:
print e
输出
File "/Users/hexin/PycharmProjects/py3/day9/1.py", line 11
print e
^
SyntaxError: Missing parentheses in call to 'print'
- 多分支
try:
msg=input('>>:')
int(msg) #ValueError
#
# print(x) #NameError
# #
# # l=[1,2]
# # l[10] #IndexError
#
# 1+'asdfsadfasdf' #TypeError
except ValueError as e:
print(e)
except NameError:
print('NameError')
except KeyError as e:
print(e)
>>:gg
invalid literal for int() with base 10: 'gg'
- 万能异常
在python的异常中,有一个万能异常:Exception,他可以捕获任意异常
s1 = 'hello'
try:
int(s1)
except Exception as e:
'丢弃或者执行其他逻辑'
print(e)
输出
invalid literal for int() with base 10: 'hello'
- try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
#except Exception as e:
# print(e)
else:
print('try内代码块没有异常则执行我')
finally:
print('无论异常与否,都会执行该模块,通常是进行清理工作')
输出
invalid literal for int() with base 10: 'hello'
无论异常与否,都会执行该模块,通常是进行清理工作