异常错误python

Python程序运行过程中可能出现各种异常错误,这些错误可能是由于程序写错了语法、逻辑出了问题、用户的非法操作等原因造成的。为了让程序更加健壮和可靠,我们需要理解异常错误的概念和处理方法。

一、异常错误概述

异常是指程序在运行中发生了错误,这些错误通常由于代码问题、输入数据异常或者硬件故障等原因造成的,而在Python中,遇到异常错误就会引发一个异常对象,如果不对其进行捕获和处理,就会导致程序中断。

Python中内置了许多异常类型,比如SyntaxError(语法错误)、NameError(名称错误)、TypeError(类型错误)、AttributeError(属性错误)、ValueError(值错误)等等,除此之外,我们也可以自定义异常类型。

当程序遇到异常错误时,就会引发一个异常对象,这个对象包含了异常的类型和相关的信息,我们可以用try...except语句来捕获这个异常对象,然后进行针对性的处理。

二、异常处理方法

在Python中,我们可以使用try...except语句来捕获和处理程序的异常,其基本格式如下:

```python

try:

# 可能会发生异常的语句

except ExceptionType1:

# 处理第一种类型的异常

except ExceptionType2:

# 处理第二种类型的异常

else:

# 如果没有异常就执行这里的语句

finally:

# 不管有没有异常都要执行这里的语句

```

其中,`try...except`语句中的`try`块包含了可能会发生异常的语句,如果在这里发生了异常,就会跳转到相应的`except`块中执行异常处理代码。

`except`语句后面的`ExceptionType`指定了要捕获的异常类型,如果没有指定具体的异常类型,那么就会捕获所有类型的异常。如果程序中存在多种类型的异常,可以使用多个`except`块来分别处理不同类型的异常。

如果在`try`块中没有发生异常,就会执行`else`块中的语句,`finally`块的语句始终会在`try...except`语句执行完毕后被执行,不管有没有异常都会执行。

比如下面的代码中,我们将一个字符串转换为数字,如果字符串不能转换为数字就会引发一个`ValueError`异常:

```python

def test():

try:

val = int("abc")

except ValueError as e:

print("转换失败:", e)

else:

print("转换成功:", val)

finally:

print("执行finally块...")

```

这个程序会输出异常信息,然后继续执行`finally`块中的代码:

```

转换失败: invalid literal for int() with base 10: 'abc'

执行finally块...

```

三、常见异常类型

Python中内置的异常类型比较多,包括但不限于以下几种:

1. SyntaxError:语法错误

2. NameError:名称错误,表示程序中引用了一个不存在的名称

3. TypeError:类型错误,表示操作或函数调用的参数类型错误

4. ValueError:值错误,表示函数或操作的参数值错误

5. ZeroDivisionError:除数为零错误

6. IndexError:索引错误,表示序列的索引超出了范围

7. AttributeError:属性错误,表示对象没有这个属性或方法

8. KeyboardInterrupt:用户中断错误,表示用户按下了ctrl+c中断了程序的执行

9. IOError:输入输出错误,表示读写文件或网络等IO操作失败

四、自定义异常类

在编写程序的过程中,有时我们需要自定义一些异常类来表示特定的应用场景和错误类型,比如下面这个例子中,我们自定义了一个`PriceError`异常类来表示产品价格的异常:

```python

class PriceError(Exception):

def __init__(self, price):

self.price = price

super().__init__("Invalid price: " + str(price))

try:

price = -5

if price < 0:

raise PriceError(price)

except PriceError as e:

print(e)

```

输出结果如下:

```

Invalid price: -5

```

在这里,我们自定义了一个名为`PriceError`的异常类,它继承自Python内置的`Exception`类,并在构造方法中保存了价格信息。在程序执行过程中,如果价格小于0,就会引发一个`PriceError`异常,然后在`except`块中捕获这个异常并输出错误信息。

五、小游戏示例

下面我们来编写一个简单的小游戏,演示如何利用异常处理机制处理异常情况。

这个游戏的规则是:计算机随机给出一个四位数字,用户输入自己猜测的数字,计算机会给出猜测结果。具体规则如下:

1. 计算机随机生成一个四位不重复的随机数字,例如1234。

2. 用户输入自己猜测的四位数字,例如5678。

3. 计算机分别对四个数字进行比较,如果数字和位置都相同,则返回A;如果数字相同但位置不同,则返回B;如果数字不同,则不返回任何值。

4. 根据返回的AB值,进行反馈,直到猜测的数字完全正确为止。

下面是完整的代码实现:

```python

import random

def generate_number():

"""

生成一个四位不重复的随机数字

"""

seq = [str(i) for i in range(10)]

random.shuffle(seq)

return "".join(seq[:4])

def check_guess(answer, guess):

"""

检查用户猜测的数字和答案的匹配情况

返回元组(a, b),a表示数字和位置都正确的个数,b表示数字正确但位置不对的个数

"""

a = 0

b = 0

for i in range(4):

if guess[i] == answer[i]:

a += 1

elif guess[i] in answer:

b += 1

return (a, b)

def play_game():

"""

猜数字游戏主程序

"""

print("欢迎来到猜数字游戏!")

answer = generate_number()

print("我已经生成了一个四位数字,请开始猜测!")

for i in range(10):

try:

guess = input("请输入你的猜测(要求四位数字且不重复):")

if len(guess) != 4 or len(set(guess)) != 4:

raise ValueError("输入错误,请重新输入!")

result = check_guess(answer, guess)

if result[0] == 4:

print("恭喜你,猜对了!")

break

else:

print("猜测结果:A{}B{}".format(result[0], result[1]))

except ValueError as e:

print(e)

else:

print("很遗憾,你没有在规定次数内猜对,正确答案是:", answer)

play_game()

```

这个程序中,我们主要利用了`try...except`语句来处理用户的输入错误和输出游戏结果,让程序更加健壮和稳定。如果用户的输入不符合要求,就会引发一个`ValueError`异常并提示用户重新输入,如果用户在规定的次数内猜对了答案,就会结束游戏并输出胜利信息。

六、总结

异常处理是任何一种编程语言中都非常重要的部分,它可以帮助我们编写更加健壮和可靠的程序。在Python中,异常处理机制也非常丰富和强大,可以很方便地捕获和处理各种类型的异常。在编写程序时,我们需要对可能发生的异常情况进行充分的考虑,并根据实际情况选择合适的异常处理方法,从而保证程序的正确性和稳定性。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(120) 打赏

评论列表 共有 2 条评论

傲姿 1年前 回复TA

耘者最信和过自己的汗水,每一滴都孕育着一颗希望的种子。

没有我你还剩什么 2年前 回复TA

有的时候你乐观的像个屁,总以为自己能惊天动地。

立即
投稿
发表
评论
返回
顶部