小编mor*_*kel的帖子

当已经处于 pdb 模式时 pdb 进入一个函数

在 pdb 模式下,我经常想进入一个函数。这是一个说明我可能会做的事情的情况。鉴于代码:

def f(x):
    print('doing important stuff..')
    result = g(x) + 2
    return result

def g(x):
    print('some cool stuff going on here, as well')
    0 / 0  # oops! a bug
    return x + 5

Run Code Online (Sandbox Code Playgroud)

现在,假设我在print('doing important stuff...')和之间设置了一个断点result = g(x) + 2。所以现在,f(x)看起来像这样:

def f(x):
    print('doing important stuff..')
    __import__('pdb').set_trace()  # or something similar..
    result = g(x) + 2
    return result
Run Code Online (Sandbox Code Playgroud)

然后,我调用该函数f(x)x=5,期待得到一个结果12。当被调用时,我最终在f. 命中n会给我错误(在这种情况下是 ZeroDivisionError)。现在,我想以g(x) …

python pdb

12
推荐指数
1
解决办法
8396
查看次数

对 ParamSpec 变量应用转换?

我有什么方法可以对 a 应用转换ParamSpec吗?我可以用一个例子来说明这个问题:

from typing import Callable

def as_upper(x: str):
    return x.upper()

def eventually(f: Callable[P, None], *args: P.args, **kwargs: P.kwargs):
    def inner():
        def transform(a):
            return a() if isinstance(a, Callable) else a
        targs = tuple(transform(a) for a in args)
        tkwargs = {k: transform(v) for k,v in kwargs.items()}
        return f(*targs, **tkwargs)
    return inner

eventually(as_upper, lambda: "hello")  # type checker complains here
Run Code Online (Sandbox Code Playgroud)

这个类型检查器(在我的例子中是pyright)会抱怨这一点。该函数eventually收到了一个可调用函数() -> str,而不是str预期的一个。我的问题是:有什么方法可以让我指定它应该期望() -> str而不是它str本身?一般来说,如果一个函数需要一个类型,T我可以将它转换为(比如说)() -> …

python typing

4
推荐指数
1
解决办法
1437
查看次数

标签 统计

python ×2

pdb ×1

typing ×1