异常即是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。

python 常见错误类型 python中常见的错误_缩进

常见异常和错误

1、SyntaxError

语法错误。可能是拼写不正确、符号错误、缺失等。例如,比较符号应该是【==】,而不是【=】。

a = 10
if a = 9:
    print('大')
##########################
    if a = 9:
         ^
SyntaxError: invalid syntax

2、IndentationError

缩进错误。Python遵循严格的缩进规则。例如,print行没有缩进。

a = 10
if a > 9: 
print('大')
##################################
    print('大')
        ^
IndentationError: expected an indented block

3、TypeError

类型错误。执行了对某一类型无效的操作。例如,整型+字符串。

a = 10
if a > 9:
    print(a + '大')
##############################################
    print(a + '大')
TypeError: unsupported operand type(s) for +: 'int' and 'str'

4、IndexError

序列中没有此索引(index)。例如,列表取值超出范围。

a = [1, 3, 5]
print(a[4])
#############################
    print(a[4])
IndexError: list index out of range

5、NameError

未声明/初始化对象 (没有属性)。例如,没有声明变量b就对其执行操作。

a = [1, 3, 5]
print(b[4])
#############################
    print(b[4])
NameError: name 'b' is not defined

6、ValueError

传入无效的参数。例如,试图将一个与数字无关的类型转化为整数。

print(int('大'))
##############################################
    print(int('大'))
ValueError: invalid literal for int() with base 10: '大'

7、KeyError

映射中没有这个键。例如,用字典里没有的键访问数据。

dic = {'name':'polly', 'sex': 'female'}
print(dic['age'])
##############################################
    print(dic['age'])
KeyError: 'age'

8、ZeroDivisionErro

除(或取模)零 (所有数据类型)。例如,10/0在数学上是不成立的。

print(10/0)
##############################################
    print(10/0)
ZeroDivisionError: division by zero

9、AttributeError

对象没有这个属性。

class Person():
    def __init__(self):
        self.name = 'polly'
        self.sex = 'female'

p = Person()
print(p.age)
##############################################
    print(p.age)
AttributeError: 'Person' object has no attribute 'age'

python 常见错误类型 python中常见的错误_异常处理_02

异常处理

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

如果你不想在异常发生时结束你的程序,只需在try里捕获它。

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
  • finally是无论是否发生异常都将执行最后的代码。
try:
  code    #需要判断是否会抛出异常的代码,如果没有异常处理,python会直接停止执行程序

except:  #这里会捕捉到上面代码中的异常,并根据异常抛出异常处理信息
#except ExceptionName,args:    #同时也可以接受异常名称和参数,针对不同形式的异常做处理

  code  #这里执行异常处理的相关代码,打印输出等


else:  #如果没有异常则执行else

  code  #try部分被正常执行后执行的代码

finally:
  code  #退出try语句块总会执行的程序