语法错误,syntax error
两类报错信息示意如下
# 语法错误
2 x 2 >
File "<stdin>", line 1
2 x 2
^
SyntaxError: invalid syntax
# 异常
# 除数为0的异常
2 / 0 >
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>
# 变量未定义的异常
1 > a +=
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
如果对于基础语法不熟悉,就可能编写出语法错误的代码,这种是编程新手常犯的错误,而异常则是因为考虑的不够周全,比如除数为0的异常,可能初次测试时被除数都不为0,开发者就认为代码是ok的,但是当处理的项目多了,某一天处理了一个除数为0的事务时,代码报错了,此时才意识到代码存在bug, 这也是为什么软件开发不能一步到位,而是不断迭代升级的原因,只有当代码处理的项目足够多的,范围足够广,才能够发现现有代码的不足,从而做出改进。
对于代码中可能的异常进行处理,可以增加程序的健壮性。在python中,通过try..except语句进行异常捕获,基本用法如下
def calc(a, b):
try:
num = a / b
except ZeroDivisionError:
'[Warning] {} is zero'.format(b)) print(
'inf') if a >= 0 else float('-inf') num = float(
return num
...
2, 1) calc(
2.0
2, 0) calc(
[Warning] 0 is zero
inf
try语句的具体原理如下
将可能存在异常的语句放置在try代码块中
用except捕获对应的异常,except语句可以有多条,对应多个不同类型的异常,当try中的某条语句跑出异常之后,程序就会根据异常类型,执行对应的except语句
else
finally
else语句只有当try中的代码没有抛出异常时,才会执行; finally语句在try语句正常执行或者异常被处理之后就会执行,示例如下
def calc(a, b):
try:
num = a / b
except ZeroDivisionError:
'[Warning] {} is zero'.format(b)) print(
'inf') if a >= 0 else float('-inf') num = float(
except TypeError:
num = float(a) / float(b)
except:
raise
else:
'{} / {} == {}'.format(a, b, num)) print(
finally:
'result is {}'.format(num)) print(
return num
...
>>>
# try语句没有抛出异常,else和finally都执行
2, 1) calc(
2 / 1 == 2.0
result is 2.0
2.0
# try语句抛出异常,else语句没有执行,except处理了异常,finally执行
2, 0) calc(
[Warning] 0 is zero
result is inf
inf
# try语句抛出异常,else语句没有执行,except处理了异常,finally执行
'2', 1) calc(
result is 2.0
2.0
# try语句抛出异常,但是没有对应的except处理该异常,程序终止,else和finally都没有执行
1) calc(a,
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
在实际开发中,初次编码只需要针对已知的异常类型进行处理即可,后续再根据遇到的报错调整代码。
·end·
联系客服