错误和异常
错误
-
语法错误(syntax error)
-
逻辑错误(logic error)
-
执行期间错误(runtime error)
- Demo:
-
for i in range(10) print(i) for i in range(10) ^ SyntaxError: invalid syntax
python的语法分析器完成,检测到错误所在的文件和行号,以向上箭头标记错误位置,最后显示错误类型
当程序检测到一个错误,解释器就无法继续执行下去,抛出异常,终止程序
异常
系统根据不同的错误,抛出不同的异常
常见异常:
print(1/0)
ZeroDivisionError: division by zero
a=10
print(a)
print(b)
NameError: name 'b' is not defined
li = [1,2,3]
print(li[3])
IndexError: list index out of range
dic = {'name':'tom'}
print(dic['age'])
KeyError: 'age'
f =open('txt.txt')
FileNotFoundError: [Errno 2] No such file or directory: 'txt.txt'
a = 20
a = 20
^
IndentationError: unexpected indent
异常处理
程序一旦发生错误,程序就无法继续运行
try…except…
try:
try_starements
except [exceptionType[as identifier]]:
except_statements
[else:
else_statements]
[finally:
finally_statements]
try:
X = eval(input('请输入被除数x:\t'))
Y = eval(input('请输入除数y:\t'))
Z = X/Y
except ZeroDivisionError:
print('除数不可以为0.')
except NameError:
print('请检查变量是否赋值。')
except Exception as e:
print(e.args)
else:
print('未捕捉到异常,X/Y=',Z)
finally:
print('离开try...except模块。')
请输入被除数x: 4
请输入除数y: 0
除数不可以为0.
离开try...except模块。
请输入被除数x: 4
请输入除数y: b
请检查变量是否赋值。
离开try...except模块。
请输入被除数x: 4
请输入除数y: 2
未捕捉到异常,X/Y= 2.0
离开try...except模块。
请输入被除数x: 12
请输入除数y: 4,
("unsupported operand type(s) for /: 'int' and 'tuple'",)
离开try...except模块。
raise(触发异常)
除了系统抛出的异常,我们可以用raise语句自己触发异常。
格式:
raise [Exception[,args[,traceback]]]
-
Exception:异常类型
-
args:我们自己提供的异常参数
-
Traceback:可选,如果存在,跟踪异常现象
-
raise NameError('sorry,Error Occurs') Traceback (most recent call last): File "/Users/xujiaqi/PycharmProjects/untitled5/7yue.py", line 21, in <module> raise NameError('sorry,Error Occurs') NameError: sorry,Error Occurs
将自己触发的异常异常处理:
try:
raise NameError('sorry,Error Occurs')
except NameError:
print('捕捉到异常。')
捕捉到异常。
assert(断言)
assert condition
逻辑上相当于:
if not condition:
raise AssertionError()
为断言添加一个异常参数
assert expression[,args]
Arguments
li = [1, 5]
assert len(li) >= 5, '列表元素个数小于5'
Traceback (most recent call last):
File "/Users/xujiaqi/PycharmProjects/untitled5/7yue.py", line 26, in <module>
assert len(li) >= 5, '列表元素个数小于5'
AssertionError: 列表元素个数小于5