异常处理
"""
try:
可能发生错误的语句
except 异常类型:
如果try语句发生错误,那么执行此处语句
"""
try:
print(1/0)
# 捕获异常
except ZeroDivisionError:
# 如果捕获到了异常,那么就执行下边的语句
print("除数不能为0!")
print("hello")
try:
L = [1,2,3,4]
print(L[6])
except IndexError:
print("超出索引范围!")
Name = "jack"
try:
print(name)
except NameError:
print("变量不存在!")
try:
main()
except BaseException:
pass
try:
print(1/0)
except:
print("除数不能为零!")
"""
try:
有可能发生错误的语句
except 异常信息:
异常之后要执行的代码
else:
没有发生异常的时候执行下边的语句
"""
try:
print(1/1)
except BaseException:
print("除数不能为0!")
else:
print("hello")
"""
try:
有可能发生错误的语句
except 异常信息:
异常之后要执行的代码
else:
没有发生异常的时候执行下边的语句
finally:
不管是否有异常,都会执行这里的语句
"""
try:
print(1/1)
except BaseException:
print("除数不能为0!")
finally:
print("无论如何都会执行我!")
异常处理的特殊情况
-
python中的错误其实就是class,所有的错误都继承baseexception,所以我们在捕获的时候,它捕获了该类型的错误,并且它还把子类一网打尽
-
try: print(1/0) except BaseException as e: print("异常1") except ZeroDivisionError as e: print("异常2")
-
-
有些错误无法捕获
比如说内存错误,如果我们想开辟一块新的内存空间,那就必须先释放一部分内存 -
跨越多层调用:
-
def func1(num): print(1/num) def func2(num): func1(num) def main(): func2(0) try: main() except ZeroDivisionError as e: print("*****") #Main调用了func2,func2调用了func1,但是出现错误的是func1,这个时候只要main捕获到了就可以处理
-