Python 3 入门,看这篇就够了 (13)

输出:

John's info: {'name': 'John', 'age': 36, 'class_name': '', 'balance': 22.0} Mary's info: {'name': 'Mary', 'age': 18, 'teacher_name': '', 'balance': 18} Fake's info {'name': 'Fake', 'age': 18, 'teacher_name': '', 'balance': 30} john.exchange('a', 'b'): ('b', 'a') Teacher.exchange(1, 2) (2, 1) Account.exchange(10, 20): (20, 10) Account.total_balance(): 0 Teacher.total_balance(): 20 Student.total_balance(): 48 这里重载了 __str__ 专有方法, {'name': 'Fake', 'age': 18} 错误和异常 语法错误

SyntaxError 类表示语法错误,当解释器发现代码无法通过语法检查时会触发的错误。语法错误是无法用 try...except...捕获的。

>>> print: File "<stdin>", line 1 print: ^ SyntaxError: invalid syntax 异常

即便程序的语法是正确的,在运行它的时候,也有可能发生错误。运行时发生的错误被称为异常。
错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。

>>> 1 + '0' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' 异常处理

Python 提供了 try ... except ... 的语法结构来捕获和处理异常。

try 语句执行流程大致如下:

st=>start: try 子句 cond_has_error=>condition: 是否有异常 cond_has_else=>condition: 是否有 else 子句 cond_has_finally=>condition: 是否有 finally 子句 io=>inputoutput: verification op_except=>operation: except 子句处理异常 op_else=>operation: 执行 else 子句 op_finally=>operation: 执行 finally 子句 e=>end: 结束 st->cond_has_error cond_has_error(yes, right)->op_except->cond_has_else cond_has_error(no)->cond_has_else cond_has_else(yes, right)->op_else->cond_has_finally cond_has_else(no)->cond_has_finally cond_has_finally(yes, right)->op_finally->e cond_has_finally(no)->e

首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)

如果没有异常发生,忽略 except 子句,try 子句执行后结束。

如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。最后执行 try 语句之后的代码。

如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。

一个 try 语句可能包含多个 except 子句,分别来处理不同的特定的异常。

最多只有一个 except 子句会被执行。

处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

最后一个 except 子句可以忽略异常的名称,它将被当作通配符使用。可以使用这种方法打印一个错误信息,然后再次把异常抛出。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxsjp.html