引发类型为“system.outofmemoryexception”的异常。_一文教你读懂 Python 中的异常信息!这改bug就容易了吗?...

本文介绍了Python中的Traceback,即错误信息,帮助开发者理解并定位代码中的异常。当Python程序出错时,Traceback提供详细信息,包括异常类型、错误消息和代码位置。通过分析Traceback,可以找到引发异常的原因,例如NameError、SyntaxError、TypeError等。文章还给出了如何阅读和利用Traceback进行错误调试的方法,以及如何通过try/except和logging模块记录异常信息。
摘要由CSDN通过智能技术生成

在写 Python 代码的时候,当代码中出现错误,会在输出的时候打印 Traceback 错误信息,很多初学者看到那一堆错误信息,往往都会处于懵逼状态,脑中总会冒出一句,这都是些啥玩意。如果你是第一次看到它,也许你不知道它在告诉你什么。虽然 Python 的 Traceback 提示信息看着挺复杂,但是里面丰富的信息,可以帮助你诊断和修复代码中引发异常的原因,以及定位到具体哪个文件的哪行代码出现的错误,所以说学会看懂 Traceback 信息是非常重要的,另外在面试的时候也经常会问到 Python 中的异常类型及其含义,那么,接下来就让我们对其进行详细理解。

什么是 Traceback

Traceback 是 Python 错误信息的报告。在其他编程语言中有着不同的叫法包括 stack trace, stack traceback, backtrac 等名称, 在 Python 中,我们使用的术语是 Traceback。后面我提到的错误信息等词都表示Traceback。

当你的程序导致异常时,Python 将打印 Traceback 以帮助你知道哪里出错了。下面是一个例子来说明这种情况

dd2a7386b623af04d8ac019933f391b8.png
# example.py 
def  greet(someone ):
    print('Hello, ' + someon )
greet('Chad')

这里首先定义了函数 greet,然后传入参数 someone,然后函数内,一个 print 语句其中 someon 是一个没有定义的变量,

然后通过 greet ('Chad'),调用刚才定义的 greet 函数,运行之后会出现如下错误信息。

(Python 中的错误信息开头就是 Traceback。)

Traceback  (most  recent  call  last ):
  File  "/Users/chenxiangan/pythonproject/demo/exmpale.py", line  5, in  <module>
    greet ('Chad')
  File  "/Users/chenxiangan/pythonproject/demo/exmpale.py", line  3, in  greet 
    print ('Hello, ' + someon )
NameError: name  'someon' is  not  defined 

此错误输出包含诊断问题所需的所有信息。错误输出的最后一行一般会告诉你引发了什么类型的异常,以及关于该异常的一些相关信息。错误信息的前几行指出了引发异常的代码文件以及行数。

在上面的错误信息中,异常类型是 NameError,意思是名称使用了一个没定义的名称(变量、函数、类)的引用。在本例中,引用的名称是 someon。

一般情况下看错误信息的最后一行就能定位到错误的原因。然后在代码中搜索错误提示中的名称"someon",然后发现这是一个拼写错误,然后我们改成 someone 即可。

然而,有些代码的错误信息要比这个复杂的多。

如何阅读 Python 的 Traceback 信息?

当你想确定代码为什么引发异常的时侯,可以根据 Python 的 Traceback 获取许多有用的信息。下面,将列举一些常见的 Traceback,以便理解 Tracebac 中包含的不同信息。

Python Traceback 信息一览

每个 Python 的 Traceback 信息都有几个重要的部分。下图显示了各个组成部分:

私信小编01 获取全套学习教程以及数十套PDF!

821e61897deb4ab3009bbaa5de7cd855.png
  • 蓝框:Traceback 的最后一行为错误消息行。其中包含引发的异常名称。
  • 绿框:异常名称后面是错误消息。此消息通常包含有用的信息,用于了解引发异常的原因。
  • 黄色方框:阅读顺序由下而上,最下面的信息,是抛出错误的最外层的位置,越往上代码调用深度越深。
  • 然后每个出错的文件会有两条错误信息,第一行是 File 后面紧跟着文件的路径,然后是行数,最后是模块或者方法名。
  • 在 Pycharm 中点击文件的链接即可定位到错误的位置。
  • 红色下划线:第二行就是实际执行的代码语句了。

一个具体的

通过一些特定的 Traceback 信息,可以帮助我们更好地理解并查看 Traceback 将提供什么信息。

通过下面的示例代码来说明 Python 中 Traceback 所提供的信息

def  who_to_greet(person ):
    return  person  if  person  else  input ('Greet  who? ')
def  greet(someone, greeting='Hello'):
    print(greeting  + ', ' + who_to_greet (someone ))
def  greet_many(people):
    for  person  in  people:
        try:
            greet(person )
        except  Exception:
            print ('hi, ' + person )

定义一个 who_to_greet 函数,然后接受一个值 person,并根据 if 判断返回相应结果。

然后,greet 函数接受一个 someone 和一个可选的 greeting,之后调用 print 函数,在 print 中调用 who_to_greet 函数并传入参数 someone。

最后,greet_many(),将迭代 people 列表并调用 greet 函数。如果通过调用 greet()引发异常,则会打印一个简单的问候语。

只要提供了正确的输入,此代码就没有任何可能导致异常被引发的错误。

如果你在 greetings.py 中调用 greet 函数,并传入值(例如 greet ('chad',greting ='Yo')),那么你将获得以下 Traceback 信息

Traceback  (most  recent  call  last ):
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值