编写和运行程序时,不可避免地会产生 错误和异常 。 调试程序, 发现错误并解决错误是程序员的必备技能之一

错误通常是指代码运行前的语法逻辑错误。语法错误是指源代码中的拼写不符合解释器和编译器所要求的语法规则,一般集成开发工具中都会直接提示语法错误,编译时提示SyntaxError。必须在程序执行前改正,否则程序无法运行。逻辑错误是程序代码可执行,但执行结果不符合要求。例如求两个数中最大数,返回的结果却是最小数。      

 初学者经常遇到的一些语法错误

Python def出现红色错误 python raise error_抛出异常


     异常

是指程序语法正确,但执行中因一些意外而导致的错误, 异常并不是一定会发生

,例如两个数相除时,大部分情况下都能正常执行, 但除数为0时将会发生异常

。默认情况下,程序运行中 遇到异常时将会终止

,并在控制台打印出 异常出现的堆栈信息

。通过程序 可避免因异常导致的程序终止


Python def出现红色错误 python raise error_抛出异常_02

  初学者经常遇到的一些异常及其含义

Python def出现红色错误 python raise error_python中raise抛出异常_03


异常处理

是指程序设计时,就考虑到了可能出现的意外情况,为了 避免因异常而导致程序终止给用户带来不好的体验

,而做的一些额外操作。例如,当执行两个数相除时, 如果用户输入的除数为0,则提示用户除数不能为0,让他重新输入

,而不是直接终止,给用户提示一大堆异常堆栈信息。异常处理使得异常出现后, 程序仍然可以继续执行


Python中通常将可能发生异常的代码放在try语句中,如果发生异常则通过except语句来捕获异常并对做一些额外处理,如果没有发生异常则执行后面的else语句,最后执行finally语句做一些收尾操作。

 异常处理之try…except…结构

Python def出现红色错误 python raise error_python中raise抛出异常_04

Python def出现红色错误 python raise error_python中raise抛出异常_05

注意事项和一些技巧

  • try子句后面可以有多个except子句,分别用来处理不同类型的异常,但最多只有一个except子句会执行
  • 一个except子句可以同时处理多个异常,多个异常名称放在一个元组中
  • 通常会在except子句的最后加上一个不带异常名称的except子句异常名称为Exception的except子句,此时可捕获所有的异常,避免程序意外终止;
  • 通常会将捕获到的异常赋值给某个变量,然后通过该变量获取异常的信息,例如except 异常名称 as 变量
  • except子句的顺序会影响到程序的执行结果,如果异常之间存在包含关系,通常会将范围大的异常放在后面,范围小的异常放在前面

异常处理之try…except…finally…结构

Python def出现红色错误 python raise error_python中raise抛出异常_06

Python def出现红色错误 python raise error_抛出异常_07

异常处理之try…except…else…finally…结构

Python def出现红色错误 python raise error_python中raise抛出异常_08

除了系统中提供的一些异常之外,我们也可以根据业务需要抛出自定义的异常,例如要求传递过来的字符串长度在6到10位之间,不满足要求时,抛出异常。有时候,我们捕获到了异常,但暂时不知道如何处理,此时也可以抛出异常,让其他调用者进行处理

Python中提供了raise语句允许用户主动抛出异常,raise关键字后面需要提供一个异常实例或者异常类,如果传递的是异常类,则会调用无参数的构造方法来实例化对象。

如果捕获到了异常,但是暂时不处理,可以直接通过raise语句抛出异常,此时raise关键字后面什么都不用写

Python def出现红色错误 python raise error_异常处理_09

今日练习题

Python def出现红色错误 python raise error_Python def出现红色错误_10