错误的处理语法:
try ... except ... finally ...
把可能会出错的代码放到try语句里面,执行出错,执行except语句块。如果有finally语句块,则执行finally语句块。执行没有错,不执行except语句块,但是一定会执行finally语句块。
可以有多个不同的except语句块。
实例:
1
2
3
4
5
6
7
8
9
10
11
|
try
:
print
(
'try...'
)
r
=
10
/
int
(
'a'
)
print
(
'result:'
, r)
except
ValueError as e:
print
(
'ValueError: '
, e)
except
ZeroDivisionError as e:
print
(
'ZeroDivisionError: '
, e)
finally
:
print
(
'finally...'
)
print
(
'END'
)
|
如果没有错误发生,可以在except后面加一个else,自动执行else。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
try
:
print
(
'try...'
)
r
=
10
/
int
(
'a'
)
print
(
'result:'
, r)
except
ValueError as e:
print
(
'ValueError: '
, e)
except
ZeroDivisionError as e:
print
(
'ZeroDivisionError: '
, e)
else
:
print
(
'no error!'
)
finally
:
print
(
'finally...'
)
print
(
'END'
)
|
python所有的错误都继承于BaseException,捕获错误可以跨越多层调用。
抛出错误
要抛出错误,首先需要定义一个错误的class,选择好继承关系,然后使用raise语句抛出一个错误的实例。
1
2
3
4
5
6
7
8
9
10
11
12
|
class
FooError(ValueError):
pass
def
foo(s):
n
=
int
(s)
if
n
=
=
0
:
raise
FooError(
'invalid value: %s'
%
s)
return
10
/
n
foo(
'0'
)
|
python debug的方法:
直接print(),简单粗暴。
断言assert
用print的地方都可以用assert来替代。
示例:
1
2
3
4
5
6
7
|
def
foo(s):
n
=
int
(s)
assert
n !
=
0
,
'n is zero!'
return
10
/
n
def
main():
foo(
'0'
)
|
断言失败,assert会抛出AssertionError:
logging
把assert换成logging,logging不会抛出错误,可以输出到文件。
1
2
3
4
5
6
7
|
import
logging
logging.basicConfig(level
=
logging.INFO)
# level的级别有debug,info, warning, error
s
=
'0'
n
=
int
(s)
logging.info(
'n=%d'
%
n)
print
(
10
/
n)
|
本文转自ting2junshui51CTO博客,原文链接:http://blog.51cto.com/ting2junshui/1751835 ,如需转载请自行联系原作者