python教程标准库

Python 错误流

在 Python 中,当程序发生错误时,会将错误信息输出到标准错误流(standard error stream)中。标准错误流是一个特殊的输出流,它默认输出到控制台,通常被称为“错误流”(err stream),也可以重定向到文件中。

错误信息包含了错误类型的名称、出错的文件名和行号、最后一个执行的语句以及出错信息等,这些信息通常对于调试程序非常重要。

Python 的错误信息格式一般如下:

```

Traceback (most recent call last):

File "some_file.py", line 12, in

some_function()

File "some_file.py", line 7, in some_function

print(1 / 0)

ZeroDivisionError: division by zero

```

其中第一行是 traceback(回溯)信息,它显示了错误发生的位置及调用栈信息;后面的几行是具体的错误信息。

try/except 语句

在 Python 中,我们可以使用 try/except 语句来捕获程序中的异常,并进行处理。

try/except 语句的语法如下:

```

try:

# 执行可能会抛出异常的代码

except ExceptionType1:

# 处理 ExceptionType1 类型的异常

except ExceptionType2:

# 处理 ExceptionType2 类型的异常

...

else:

# 如果没有异常发生,执行这里的代码

finally:

# 不管有没有异常发生,都会执行这里的代码

```

try 后面的代码块是可能会抛出异常的代码,except 后面的代码块则是对异常的处理方式。如果没有发生异常,else 后面的代码块将会被执行,而 finally 后面的代码块将会在最后被执行。

在 except 后面,我们可以处理特定类型的异常,也可以使用通配符 (*) 处理所有类型的异常。当程序抛出一个异常时,Python 会从上到下依次匹配所有的 except 语句,直到找到一个匹配的处理方式为止。如果所有的 except 语句都不匹配,那么异常将会继续向上级代码抛出。

例如,我们可以使用 try/except 语句来避免除 0 错误:

```

try:

a = 10 / 0

except ZeroDivisionError as e:

print("除数为零:", e)

```

这段代码中,我们通过 except ZeroDivisionError 来匹配 ZeroDivisionError 类型的异常,当程序发生除 0 错误时,会执行 except 块中的代码,即打印出错误信息。使用 as e 将异常信息赋值给变量 e,以便我们在后面使用。

在 except 块中,我们也可以 raise 语句来重新抛出异常,这可以在处理异常的同时不打断程序的运行。

例如,我们可以使用 try/except 语句来避免文件打开错误:

```

try:

with open("some_file.txt", "r") as f:

print(f.read())

except FileNotFoundError as e:

print("文件不存在:", e)

# 重新抛出异常

raise e

```

这段代码中,我们使用 with 语句打开一个文件,如果文件不存在,会抛出 FileNotFoundError 异常。我们使用 except 块来捕获和处理该异常,并打印错误信息。最后使用 raise 语句将该异常重新抛出,这会让程序继续向上级代码抛出异常。

自定义异常类型

除了使用内置的异常类型,我们还可以自定义异常类型。自定义异常类型需要继承自 Exception 类或其子类,并重写 __str__ 方法来自定义异常信息。

例如,我们可以自定义一个自定义除 0 异常类型:

```

class DivisionByZeroError(Exception):

def __str__(self):

return "除数不能为零!"

```

这段代码中,我们定义了一个叫做 DivisionByZeroError 的自定义异常类型,继承自 Exception 类。我们重写了 __str__ 方法,自定义了异常信息。

我们可以在需要的地方抛出该异常:

```

try:

a = 10 / 0

except ZeroDivisionError:

raise DivisionByZeroError()

```

这段代码中,我们先用 try/except 语句捕获了 ZeroDivisionError 异常,然后使用 raise 语句抛出我们自定义的 DivisionByZeroError 异常。

最后,我们还可以使用 raise 后面跟一个字符串来抛出一个指定信息的异常,例如:

```

raise Exception("发生了一个错误!")

```

这会抛出一个包含指定信息的 Exception 异常。

总结

Python 的错误流是一个特殊的输出流,用于输出程序中发生的错误信息。我们可以使用 try/except 语句来捕获和处理异常,从而让程序更加健壮。在 except 语句中,我们可以使用内置的异常类型和自定义的异常类型。另外,我们还可以使用 raise 语句抛出异常,包括内置异常和自定义异常。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(47) 打赏

评论列表 共有 0 条评论

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