26、python--学会定位查看出错位置

1、调用栈

如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出。

def foo(s):
    return 10 / int(s)

def bar(s):
    return foo(s) * 2

def main():
    bar('0')

main()

输出结果:
Traceback (most recent call last):
  File "D:/PycharmProjects/pachong/input.py", line 10, in <module>
    main()
  File "D:/PycharmProjects/pachong/input.py", line 8, in main
    bar('0')
  File "D:/PycharmProjects/pachong/input.py", line 5, in bar
    return foo(s) * 2
  File "D:/PycharmProjects/pachong/input.py", line 2, in foo
    return 10 / int(s)
ZeroDivisionError: division by zero

出错的时候,一定要分析错误的调用栈信息,才能定位错误的位置。

错误信息第1行:

Traceback (most recent call last):

告诉我们这是错误的跟踪信息。

第2~3行:

 File "D:/PycharmProjects/pachong/input.py", line 10, in <module>
    main()

调用main()出错了,在代码文件input.py的第10行代码,但原因是第8行:

   File "D:/PycharmProjects/pachong/input.py", line 8, in main
    bar('0')

调用bar('0')出错了,在代码文件input.py的第8行代码,但原因是第5行:

File "D:/PycharmProjects/pachong/input.py", line 5, in bar
    return foo(s) * 2

原因是return foo(s) * 2这个语句出错了,但这还不是最终原因,继续往下看:

File "D:/PycharmProjects/pachong/input.py", line 2, in foo
    return 10 / int(s)

原因是return 10 / int(s)这个语句出错了,这是错误产生的源头,因为下面打印了:

ZeroDivisionError: division by zeroo

根据错误类型ZeroDivisionError,可以判断,int(s)本身并没有出错,但是int(s)返回0,在计算10 / 0时出错,至此,找到错误源头。

发布了70 篇原创文章 · 获赞 29 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/LOVEYSUXIN/article/details/103409087