gpt4 book ai didi

python - 如何使用 Python 进行调试

转载 作者:行者123 更新时间:2023-12-02 07:32:59 24 4
gpt4 key购买 nike

我是一名 Java 开发人员,今天我开始使用 Python(v3.7,使用 PyCharm)。我尝试使用单个包(boto3)创建一个“hello world”应用程序:

import boto3

client = boto3.resource('ec2', region_name='eu-central-1')
client. # unlike java, no suggestion (method or attribute of client object) from the IDE

我读到PyCharm code completion not giving recommendations据我了解,由于动态类型,PyCharm 无法确定 client 的类型,因此它无法提出任何建议(例如对象的方法或属性)。

因此,在调试过程中,我被迫查找文档来识别返回对象的属性和方法。这是容易出错且费力的事情(例如,拼写错误或我假设了不同类型的对象,导致执行期间出现attribute not found错误)。

然后,我在 Debug模式下执行代码:我试图在评估框中识别返回对象的属性和方法,这也很不方便。

Python 中如何处理这种情况?你有好的引用吗?

最佳答案

如果您的编辑器行为奇怪(或者如果您没有 IDE,例如服务器上),您可以使用代码本身,因为维护人员可能已将文档包含在代码中并从代码本身生成网页/PDF。在这些情况下,总是值得在特定对象上尝试 help(),例如:

import boto3
client = boto3.resource('ec2', region_name='eu-central-1')
help(boto3)
help(client)

但只有在存在无法保证的文档字符串(代码文档)时才有效。对于这种情况,请使用以下函数:

  • type()确定对象的类型
  • dir()列出对象中的所有名称(变量、函数……)
  • vars()列出存储在 __dict__ 中的对象属性属性

如果您遇到更棘手的事情,例如没有 __dict__ 属性的对象,请始终使用 dir() 检查,因为此类对象可能使用 __slots__比基本的 __dict__ 更高效。这在 C/C++/Cython 扩展中很常见,并且会导致 vars() 函数失败并出现错误:

TypeError: vars() argument must have __dict__ attribute

这在模块级别也很有效:

import boto3
dir(boto3)

直接在控制台中使用很方便。你的编辑应该这样做,但由于某种原因显然没有这样做。

还有一种情况是,模块的行为很奇怪(找不到示例,但过去发生在我身上),与在容器化“变量”(例如 boto3 )下导入不同。 d 将其他符号泄漏到全局变量。

可以使用 globals() 轻松调试甚至locals()如果您在函数中导入。

一旦代码变得足够烦人,就跳到pdb调试器允许您以更明智的方式重新执行代码,而不是手动重新运行程序并等待控制台中的消息,该消息甚至可能不会显示(例如,未满足条件等)。

关于python - 如何使用 Python 进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com