python异常处理详解
try except
python语言中,用try except
语句块捕获并处理异常,其基本语法结构如下所示:
try:
可能产生异常的代码块
except [ (Error1, Error2, ... ) [as e] ]:
处理异常的代码块1
except [ (Error3, Error4, ... ) [as e] ]:
处理异常的代码块2
except [Exception]:
处理其它异常
1. 如上述句式所示,try有且仅有一个,except可以有多个,且每个except可以处理多个异常。
2. 其中 [ ] 可以使用也可以省略。
3. [as e] 作为可选参数,相当于给异常起一个别名,方便在 处理异常的代码块中调用异常。
4. [Exception]:作为可选参数,可以代指程序可能发生的所有异常情况,其通常用在最后一个 except 块。
例子:
try:
1/0
except Exception as e:
# args:返回异常的错误编号和描述字符串;
print(e.args)
# str(e):返回异常信息,但不包括异常信息的类型;
print(str(e))
# repr(e):返回较全的异常信息,包括异常信息的类型
print(repr(e))
else:
print(‘程序正常运行’)
try...finally
try...finally...语句无论是否发生异常都将会执行最后的代码
try:
可能产生异常的代码块
finally:
print('无论异常与否,都会执行我')
raise主动触发异常
例子:如果参数是0,则主动抛出ValueError错误
def not_zero(num):
try:
if num == 0:
raise ValueError('参数错误')
return num
except Exception as e:
print(e)
not_zero(0)
采用traceback模块查看异常
格式:
try:
代码块
except:
traceback.print_exc()
例子:
import traceback
try:
1/0
except Exception as e:
traceback.print_exc()
# 运行结果:
Traceback (most recent call last):
File "E:/PycharmProjects/ProxyPool-master/proxypool/test.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
另外,print_exc()还可以接受file参数直接写入到一个文件。比如可以像下面这样把相关信息写入到tb.txt文件去。
traceback.print_exc(file=open('tb.txt','w+'))