python的错误与异常处理


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于python的错误与异常处理,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一:语法错误syntax errors

熟悉语法!

二:异常

①打印错误信息时,异常的类型作为异常的内置名显示,并以调用栈的形式显示具体信息

②常见的异常:
NameError、
ZeropisionError、
TypeError
SyntaxError
IndexError 索引超出序列范围
KeyError 请求一个不存在的字典关键字
IOError 输入输出错误
AttributeError 尝试访问未知的对象属性
三:异常处理

1

2

3

4

5

6

while True:

try:

x = int(input("Please enter a number: "))

break

except ValueError:

print("Oops!  That was no valid number.  Try again   ")

try语句按照如下方式工作;
①首先,执行try子句(在关键字try和关键字except之间的语句)
②如果没有异常发生,忽略except子句,try子句执行后结束。
③如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。
④如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
⑤如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
⑥一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
⑦一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

1

2

except (RuntimeError, TypeError, NameError):

pass

⑧最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出。
⑨try except 语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行.

三:抛出异常

Python 使用 raise 语句抛出一个指定的异常
raise 唯一的一个参数指定了要被抛出的异常。
它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)

四:用户自定义异常

可以通过创建一个新的异常类来拥有自己的异常。
异常类继承自 Exception 类,可以直接继承,或者间接继承。
当创建一个模块有可能抛出多种不同的异常时,
一种通常的做法是为这个包建立一个基础异常类,

五:定义清理行为

1

2

3

4

try:

        raise KeyboardInterrupt

    finanlly:

        print("dooo")

不管 try 子句里面有没有发生异常,finally 子句都会执行
如果一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,
而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后再次被抛出

六:扩展------------->断言机制

assert 等价于布尔真的判定,不满足抛出异常AssertionError
用途: 防御性的程序
运行时需要逻辑检查
参考文献:《python使用断言的最佳时机》

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

# ---------------------------------------------------------------------#

# 异常处理

# ---------------------------------------------------------------------#

while True:

    try:

        x = int(input("Please enter a number: "))

        break

    except ValueError:

            print("Oops!  That was no valid number.  Try again   ")

 

# ---------------------------------------------------------------------#

# 抛出异常

# ---------------------------------------------------------------------#

"""

try:

    raise NameError('HiThere')

except NameError:

    print('An exception flew by!')

    raise

"""

 

# ---------------------------------------------------------------------#

# 用户自定义异常

# ---------------------------------------------------------------------#

class MyError(Exception):   # 继承自Exception

    def __init__(self, value):  # 构造函数重写

        self.value = value

 

    def __str__(self):

        return repr(self.value)

try:

    raise MyError(2*2)  # 抛出异常

except MyError as e:

        print('My exception occurred, value:', e.value)

# 当创建一个模块有可能抛出多种不同的异常时,

# 一种通常的做法是为这个包建立一个基础异常类,

# 然后基于这个基础类为不同的错误情况创建不同的子类

class Error(Exception):

    """Base class for exceptions in this module."""

    pass

class InputError(Error):

    """Exception raised for errors in the input.

    Attributes:

        expression -- input expression in which the error occurred

        message -- explanation of the error

    """

    def __init__(self, expression, message):

        self.expression = expression

        self.message = message

class TransitionError(Error):

    """Raised when an operation attempts a state transition that's not

    allowed.

 

    Attributes:

        previous -- state at beginning of transition

        next -- attempted new state

        message -- explanation of why the specific transition is not allowed

    """

 

    def __init__(self, previous, next1, message):

        self.previous = previous

        self.next = next1

        self.message = message

 

 

try:

    raise InputError(2*2, 45)   # 抛出异常

except InputError:         # 处理异常

        print('My exception occurred')

 

# ---------------------------------------------------------------------#

# 定义清理行为

# ---------------------------------------------------------------------#

 

def divide(x, y):

    try:

        result = x / y

    except ZeroDivisionError:

        print("division by zero!")

    else:                           # 没有异常的时执行

        print("result is", result)

    finally:                        # 无论在任何情况下都会执行的清理行为

        print("executing finally clause")

 

 

# 一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,

# 而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后再次被抛出

# divide("2", "1")   #从测试代码

以上就是python的错误与异常处理的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python函数中参数的详细介绍

Python怎么利用gpu加速

Python脚本生成caffe train_list.txt的方法

Python实现求笛卡尔乘积方法详解

Python中django图书人物适配系统的实现方法(前端)

Python语言有哪两种编程方式

单例模式Python有什么用

Python爬虫对dota排行榜爬取的实例

Python需要配置环境吗

Python字典如何添加元素

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...