标签: inspect

检查python类属性

我需要一种方法来检查类,所以我可以放心地识别哪些属性是用户定义的类属性.问题是,像DIR功能(),inspect.getmembers()和朋友返回所有类的属性包括预定义的像:__class__,__doc__,__dict__,__hash__.这当然是可以理解的,而且人们可以说,我只能命名的成员名单忽视,但遗憾的是这些预先定义的属性绑定,因此不同版本的Python使我的项目volnerable在Python项目改改 - 我不喜欢那样.

例:

>>> class A:
...   a=10
...   b=20
...   def __init__(self):
...     self.c=30
>>> dir(A)
['__doc__', '__init__', '__module__', 'a', 'b']
>>> get_user_attributes(A)
['a','b']
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想要一种安全的方法来只检索用户定义的类属性['a','b']而不是'c',因为它是一个实例属性.所以我的问题是......任何人都可以帮我解决上述虚构功能get_user_attributes(cls)吗?

PS我花了一些时间试图通过解析AST级别的类来解决问题,这很容易.但我找不到将已解析的对象转换为AST节点树的方法.我想一旦将一个类编译成字节码,就会丢弃所有的AST信息.

最好的问候雅各布

python attributes class introspection inspect

32
推荐指数
2
解决办法
3万
查看次数

Python调试:获取调用函数的文件名和行号?

我目前正在用Python构建一个非常复杂的系统,当我调试时,我经常将简单的print语句放在几个脚本中.为了保持概述,我经常还要打印出print语句所在的文件名和行号.我当然可以手动执行,或者使用以下内容:

from inspect import currentframe, getframeinfo
print getframeinfo(currentframe()).filename + ':' + str(getframeinfo(currentframe()).lineno) + ' - ', 'what I actually want to print out here'
Run Code Online (Sandbox Code Playgroud)

它打印的东西像:

filenameX.py:273 - 我真的想在这里打印出来

为了使它更简单,我希望能够做到这样的事情:

print debuginfo(), 'what I actually want to print out here'
Run Code Online (Sandbox Code Playgroud)

所以我把它放到某个地方的函数中并试着这样做:

from debugutil import debuginfo
print debuginfo(), 'what I actually want to print out here'
print debuginfo(), 'and something else here'
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到:

debugutil.py:3 - what I actually want to print out here
debugutil.py:3 - and something else here
Run Code Online (Sandbox Code Playgroud)

它打印出我定义函数的文件名和行号,而不是我调用debuginfo()的行.这很明显,因为代码位于debugutil.py文件中.

所以我的问题实际上是:如何获取调用此debuginfo()函数的文件名和行号? …

python debugging line-numbers inspect

29
推荐指数
2
解决办法
1万
查看次数

IntelliJ IDEA(Community Edition)中的Eclipse检查(Ctrl + Shift + I)等效

在Eclipse下,我可以使用Ctrl+ Shift+ 检查调试模式下的表达式/变量I.在IntelliJ IDEA(Community Edition)中,我可以向表中添加表达式/变量,但在下一次调试时它们会丢失.

有什么方法可以在我调试时动态检查变量和表达式吗?

eclipse debugging keyboard-shortcuts intellij-idea inspect

28
推荐指数
3
解决办法
2万
查看次数

Python - 获取完整的包模块名称

对于我的应用程序中的详细调试消息,我使用的函数返回一个有用的前缀.请考虑以下示例:

import inspect

def get_verbose_prefix():
    """Returns an informative prefix for verbose debug output messages"""
    s = inspect.stack()
    module_name = inspect.getmodulename(s[1][1])
    func_name = s[1][3]

    return '%s->%s' % (module_name, func_name)

def awesome_function_name():
    print "%s: Doing some awesome stuff right here" % get_verbose_prefix()

if __name__ == '__main__':
    awesome_function_name()
Run Code Online (Sandbox Code Playgroud)

这输出:

test->awesome_function_name: Doing some awesome stuff right here

我的问题是:当我在一个包中有一个模块时,例如'myproject.utilities.input',返回的模块名称get_verbose_prefix仍然只是'input',而不是'myproject.utilities.input'.当在不同子模块中可以有多个"输入"模块共同工作时,这大大降低了大型项目中前缀的帮助性.

所以我的问题是:是否有一种简单的方法可以在Python中的包中检索完整的模块名称?我打算扩展get_verbose_prefix功能,以检查模块的父目录"__init__.py"文件来推断它的全名,但首先我想知道是否有一个更简单的方法来做到这一点.

python inspect

23
推荐指数
3
解决办法
4万
查看次数

Chrome 84 检查元素,找到没有像以前那样以黄色突出显示的结果

按照惯例,在进行自动化测试时,我在 Chrome 中使用“检查”(CTRL+SHIFT+I)通过 xpath、id、CSS 选择器等查找元素。例如:

//li/a[contains(text(), "Products")]
Run Code Online (Sandbox Code Playgroud)

以上是此页面的 xpath。在以前版本的 Chrome 中,按 CTRL+F 打开“查找”选项并粘贴此 xpath 元素后,在“开发工具”/“元素”中会在“开发工具”窗口中突出显示。在新版本的 chrome 中,它没有突出显示,通常的“1/1”结果显示在“查找”选项卡的最右侧。

我已经搜索了互联网和 Chrome 设置,但无济于事。黄色突出显示是节省时间的,我确信我使用的是正确的元素。

编辑:用 Chrome 版本 84.0.4147.105 修复

感谢您提供更新、建议、解决方法等。

xpath google-chrome inspect google-chrome-devtools

23
推荐指数
2
解决办法
1万
查看次数

看不到我的chrome:// inspect /#devices设备

我按照谷歌的说明操作:https://developer.chrome.com/devtools/docs/remote-debugging.我也经历了故障排除部分 - 但似乎没有任何效果.

我有三星galaxy 3(android 4.1.2,chrome 42.0.2311.111).USB调试已启用.我已经尝试重启USB设备几次后重启设备.

在Windows 8上我运行chrome(44.0.2388.0 canary).我安装了三星USB驱动程序,我的电脑可以看到我的设备.

插入设备时或使用检查页面打开金丝雀时,我都没有收到任何通知.我错过了什么吗?

android google-chrome inspect

20
推荐指数
3
解决办法
4万
查看次数

如何检查JSP页面上的变量

我有一组工作页面,想要在JSP页面的断点处检查变量.遗憾的是,变量的上下文菜单没有像在Java文件中那样显示正常的Inspect/Watch选项.有任何想法吗?

java eclipse variables jsp inspect

16
推荐指数
2
解决办法
2万
查看次数

如何远程调试webview?

我该如何调试/检查apk webview的元素.
我试过这个,但它只适用于chrome而不是apk.

请建议我

debugging android inspect android-webview

16
推荐指数
4
解决办法
2万
查看次数

Python:装饰器可以确定是否在类中定义了函数?

我正在编写一个装饰器,并且出于各种恼人的原因[0],检查它包装的函数是独立定义还是作为类的一部分定义(以及新类继承哪些类)是有利的. .

例如:

def my_decorator(f):
    defined_in_class = ??
    print "%r: %s" %(f, defined_in_class)

@my_decorator
def foo(): pass

class Bar(object):
    @my_decorator
    def bar(self): pass
Run Code Online (Sandbox Code Playgroud)

应打印:

<function foo …>: False
<function bar …>: True
Run Code Online (Sandbox Code Playgroud)

另外,请注意:

  • 在应用装饰器时,函数仍然是函数,而不是未绑定的方法,因此测试实例/未绑定方法(使用typeofinspect)将不起作用.
  • 请仅提供解决问题的建议- 我知道有很多类似的方法可以实现这一目标(例如,使用类装饰器),但我希望它们在装饰时发生,而不是以后发生.

[0]:具体来说,我正在编写一个装饰器,可以很容易地进行参数化测试nose.然而,nose不会运行的子类测试发生器unittest.TestCase,所以我想我的装饰器能够确定它是否正在使用的一个子类中,TestCase并且不能用一个适当的错误.显而易见的解决方案-利用isinstance(self, TestCase)调用包装的函数之前是不行的,因为包装的功能需要是一个发生器,它没有得到执行,在所有.

python inspect

14
推荐指数
1
解决办法
3273
查看次数

是否有类似于hawkeye的UI检查工具与.net 4.5一起使用?

我正在使用一个针对.net 4.5的winforms应用程序,我真的需要检查UI元素.我过去曾使用Snoop来检查wpf元素,我也遇到了Hawekeye.但是,看起来hawkeye与.net 4.5不兼容.有什么工具可以给我类似的结果吗?

c# element inspect winforms

14
推荐指数
1
解决办法
7897
查看次数