小编wha*_*the的帖子

为什么 Pydantic 隐藏异常引发线?

我正在使用 Pydantic,有件事让我很好奇,Pydantic 引发的异常隐藏了引发异常的行。

例如使用以下代码:

from typing import Any

from pydantic import BaseModel
from pydantic.error_wrappers import ErrorWrapper, ValidationError
from pydantic.utils import ROOT_KEY


class MyModel(BaseModel):
    def __init__(self, **data: Any) -> None:
        exc = TypeError(f"My TypeError")
        raise ValidationError([ErrorWrapper(exc, loc=ROOT_KEY)], self.__class__)
        super().__init__(**data)


class Foo(MyModel):
    a: int


class Bar(BaseModel):
    a: int
Run Code Online (Sandbox Code Playgroud)

从我的自定义模型引发的异常将打印引发异常的行:

Foo(a=42)
# Traceback (most recent call last):
#   File "D:\_exc.py", line 23, in <module>
#     Foo(a=42)
#   File "D:\_exc.py", line 11, in __init__
#     raise ValidationError([ErrorWrapper(exc, loc=ROOT_KEY)], self.__class__)
# pydantic.error_wrappers.ValidationError: 1 validation error …
Run Code Online (Sandbox Code Playgroud)

python pydantic

6
推荐指数
0
解决办法
517
查看次数

Bash - 正确清除最后一个输出

我正在尝试创建一个可更新的进度状态。为了做到这一点,我需要能够完全清除最后一个输出,以便我可以更新它。回车可以工作,但是当输出超过终端宽度并回绕时,将无法清除最后一个输出。所以我正在使用 tput:

n=0
while [[ $n -ne 100 ]]; do
    n=$((n+1))
    tput ed #clear
    tput sc #save cursor
    echo -n "Progress: ${n}%"
    tput rc #restore cursor
    sleep 1s
done
echo
Run Code Online (Sandbox Code Playgroud)

但是,如果输出足够长以致于强制终端向上滚动,这将失败。发生这种情况时,保存的光标位置不再正确,并且无法正确清除最后的输出。

例如,如果光标当前在终端的底部并且输出比终端宽度长,则会强制终端向上滚动,使之前保存的光标位置无效。

那么有没有什么办法可以保证Bash中的光标永远不会到终端结束呢?或者也许还有其他一些替代方法来防止这个问题?

编辑:我根据 F. Hauri 的回答制作了我自己的版本,简化了我的用例

#!/bin/bash
str=$(head -c 338 < /dev/zero | tr '\0' '\141')
len="${#str}"
col=$(tput cols)
lines=$(( ((len + col - 1) / col) - 1 ))

echo -ne "${str}\r"
(( len > col )) && tput cuu "$lines"

sleep 3s

tput ed
Run Code Online (Sandbox Code Playgroud)

bash tput

5
推荐指数
1
解决办法
171
查看次数

全球安装 Poetry 项目的标准方法

我经常想使用我自己的个人Python项目来进行日常使用。在 golang 中,我可以运行go install project.go并将编译后的二进制文件发送到~/go/bin(位于我的 PATH 中)。现在我可以在系统中的全球任何地方运行我的程序。Python 和 Poetry 中有对应的吗?

我可能可以通过编写一个脚本来解决这个问题,该脚本运行一些东西poetry run $project并将该脚本放入我的路径之一。但我想知道的是,Python 和 Poetry 中是否有一种标准方法可以做到这一点。

pip install program我想要的是类似于我自己的项目的东西。

现在,我每次想运行程序时都需要cd进入我的项目文件夹并运行,这确实很麻烦。poetry run $project

python python-poetry

3
推荐指数
1
解决办法
5201
查看次数

标签 统计

python ×2

bash ×1

pydantic ×1

python-poetry ×1

tput ×1