目录 | 上一节 (8.2 日志) | 下一节 (9 包)

8.3 调试

调试主张

假设程序溃散了:

bash % python3 blah.py
Traceback (most recent call last):
File "blah.github永久回家地址py", line 13, in ?
foo()
File "blah.py", line 10, in foo
bar()
File "blah.py", line 7, inappear bar
spam()
File "blah.py", 4, in spam
line x.append(3)
AttributeError: 'int' objeGitHubct has no attribute 'append'

那么现在该怎么办呢?

阅览回溯信息

最终一行是程序溃散的详细原因:

bash % python3 blah.py
Traceback (most recent call last):
File "blah.py", line 13, in ?
foo()
File "blah.py", line 10, in foo
bar()
File "blah.py", line 7, ingiti bar
spam()
File "blah.py", 4, in spam
line xgithub官网.append(3)
# Cause of the crash
Apython下载装置教程ttributeError: 'int' object has nappreciateo atgithub敞开私库tribute 'append'

不过,github是干什么的回溯信息并不总是那么易于阅览或了解。

专业主张:将整个回溯粘贴到谷歌。

运用交互式说冥具(REPL)

实施脚本的 时分,能够运用选项 -i 使 Python 保持存活(keep alive)。

bash % pytAPPhon3 -i blah.py
Traceback (most recent cappreciateall last):
File "blah.py", line 13, in ?
foo()
FilPythone "blah.py", lgit教程ine 10, iappearn foo
bar()
File "blagithub官网h.py", line 7, in baappler
spam()
File "blah.py", 4, in spam
line x.append(3)
AttributeError: 'int' object has no attribute 'append'
>>>

选项 -i 能够保存说冥具情况git指令。这意味着能够在程序溃散后查找错误信github敞开私库息。对变量的值和其它情况进行检查。

运用打印进行调试application

运用 prGitHubint()APP数进行调试非常常python下载装置教程见。

主张:保证运用git教程的是 repr() 函数

def spam(x):
print('DEBUG:', repr(x))
...

repr() 函数闪现一个值的准确标明,而不是格局出色的输出。

>>> from decimal import Decpython保存字imal
>>&gtPython; x = Decimal('3.4github是干什么的')
# NO `repr`
>>> print(x)
3.4
# WITH `repr`apple
>>> print(rappearanceepr(x))
Decimal('3.4')
&gtapplication;>>

Pyappreciatethon 的调试器

能够在程序内手动发起调试器(debuggpython是什么意思er)。

def some_function():
...
breakpgithub直播渠道永久回家oint()      # Enter the debugger (Pappearython 3.7+)
...

上述操作会在 breakpoint() 调用appear时发起调试器。

在 Python 的早期版别中,可能会看到下面这样的调试攻略:

import pdb
...
pdb.set_trace()       # Instead of `bgithub中文官网网页reakppython123渠道登录oint()`
...

(译注apple:Python 3.7 之后,能够运用内置函数 breakpoint() 替代 import pdb; pdb.set_trace()

在调python基础教程试阐明github永久回家地址器下作业程序

也能够在调试器下作业整个程序:

bash % python3 -m pdb someprogram.py

上述操作会在第一行语句之前主动进入调试器,容许设置断点和批改配置。

常见的调试器指令:

(Pdb)github永久回家地址 help            # Get help
(Pdb) w(hegithub敞开私库re)         # Print stack trace
(Pdb) d(own)          # Move down one stack level
(Pdb) u(p)            # Move up one stack level
(Pdb) b(reak) loc     # Set a breakpoint
(Pdb) s(tep)          # Execute one instruction
(Pdb) c(ontinue)      # Continue execution
(Pdb) l(ist)          # List sourcpython编程e code
(Pdb) a(rgs)          # Pgithub中文官网网页rint args of current function
(Pdb) !statement      # Execute statement

断点的方位能够用下列恣意一种方法进行标明:

(Pdb) b 45            # Line 45 in current file
(Pdb) b file.py:45    # Line 34 in fpython保存字ile.py
(Pdb) b foo           # Function foo() in current file
(Pdb) b module.fpython编程oo    # Function fapp装置下载oo() in a module

练习

练习 8.4:Bugs? 什么是 Bugs?

有 bug,我们就解决 bug(It runs. Ship it!)。python是什么意思

github官网录 | 上一节 (8.2 日志) | 下一节 (9 包)

注:完好翻译见 github.com/codists/pra…