标签:文件句柄 关闭 系统 int open def 结束 under 异常
一. 异常处理
IndexError [][1]
KeyError {}[‘key‘]
pickle.load() EOFError
FileNotFoundError open(‘aa‘)
ModuleNotFoundError import aaaaaaaaaaa
ValueError int(‘sdjkhf‘)
NameError name
SyntaxError 语法错误
多行报错: 在嵌套调用的过程中, 内部代码出了问题, 外部所有的调用的地方都会成为报错追溯信息的一部分, 要从下往上找, 看不出问题再把报错的错误提示贴到百度
def func1():
name
def func2():
func1()
def main():
func2()
main()
单分支
try:
pass
except ValueError:
pass
多分支
try:
pass
except ValueError:
pass
except IndexError:
pass
多分支合并
try:
pass
except (ValueError, IndexError):
pass
万能异常
try:
pass
except: # 或except Exception: 或except Exception as e:
# print(e)
pass
多分支 + 万能异常 : 万能异常应该永远放在异常处理的最下面
try:
pass
except (ValueError,IndexError):
print(‘针对性的处理‘)
except Exception as e:
print(e)
print(‘通用性的处理‘)
异常处理的几种情况
try ... except
try ... except ... else
try ... finally
try ... except ... finally
try ... except ... else ... finally
else分支 当代码不发生异常, 不进行except的输出时, 进行else的输出
try:
print(‘aaa‘)
except NameError:
print(‘name error‘)
except IndexError:
print(‘index error‘)
except Exception as e:
print(‘Exception‘)
else:
print(‘else‘)
finally分支, finally用来回收一些操作系统的资源 : 数据库连接 打开的文件句柄 网络连接
try:
print(‘aaa‘)
except NameError:
print(‘name error‘)
except IndexError:
print(‘index error‘)
except Exception as e:
print(‘Exception‘)
else:
print(‘else‘)
finally: # 无论如何都会被执行
print(‘finally‘) # 无论是否执行else, 是否报错, 最终都会执行finally
def func():
f = open(‘file‘)
try:
while 1:
for line in f:
if line.startswith(‘a‘):
return line
except:
print(‘异常处理‘)
finally: # 即使return也会先执行fianlly中的代码
f.close()
try:
f = open(‘www‘,‘w‘)
f.read()
finally: # 即使遇到报错,程序结束,也会先执行finally中的代码,然后再结束程序
f.close()
print(‘文件已经关闭了‘)
主动抛出异常 : 是给其他开发者用的
raise ValueError
raise ValueError(‘你写的不对‘)
断言 - 语法
assert 1==2 # 只能接受一个布尔值 输出错误AssertionError
assert 1==1 # 只能接受一个布尔值 什么都不输出
标签:文件句柄 关闭 系统 int open def 结束 under 异常
原文地址:https://www.cnblogs.com/NachoLau/p/9519962.html