英文:
How to make typer traceback look normal
问题
当使用 typer 解析CLI参数时,我得到了非常冗长和多彩的错误消息。如何获取普通的Python回溯?请参见以下示例回溯的屏幕截图(仅显示前几行),以了解冗长风格的示例:
❯ python scripts/add_priors.py
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /Users/corneliusromer/code/nextclade_data_workflows/sars-cov-2/scripts/add_priors.py:26 in main │
│ │
│ 23 │ import polars as pl │
│ 24 │ │
│ 25 │ priors = ( │
│ ❱ 26 │ │ pl.scan_ndjson(ndjson, infer_schema_length=10000) │
│ 27 │ │ .select( │
│ 28 │ │ │ [ │
│ 29 │ │ │ │ pl.col("nearestNodes"), │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ json = <module 'json' from │ │
│ │
(Note: The code part is not translated as per your request.)
英文:
When using typer to parse CLI arguments, I get very verbose and colorful error messages. How can I get a normal Python traceback?
See screenshot for an example traceback (just the first few lines) for illustration of the verbose style:
❯ python scripts/add_priors.py
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /Users/corneliusromer/code/nextclade_data_workflows/sars-cov-2/scripts/add_priors.py:26 in main │
│ │
│ 23 │ import polars as pl │
│ 24 │ │
│ 25 │ priors = ( │
│ ❱ 26 │ │ pl.scan_ndjson(ndjson, infer_schema_length=10000) │
│ 27 │ │ .select( │
│ 28 │ │ │ [ │
│ 29 │ │ │ │ pl.col("nearestNodes"), │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ json = <module 'json' from │ │
│ │
答案1
得分: 2
如果您没有使用子命令,即只使用 typer.run(main)
,那么无论如何都要创建一个 typer 实例并显式运行 main
命令。
例如:
app = typer.Typer(pretty_exceptions_enable=False)
app.command()(main)
app()
注意:我本来打算将其留在接受答案的下方作为注释,但我不能在注释中添加多行,并且Python对于空格/换行符要求严格。
英文:
Also, if you're not using sub-command. i.e. using just typer.run(main)
then create an instance of typer regardless and run the main
command explicitly.
e.g.
app = typer.Typer(pretty_exceptions_enable=False)
app.command()(main)
app()
Note: I was going to leave it as comment below accepted answer but I can't add multiple lines in comment and python is picky about spaces/newlines.
答案2
得分: 1
你可以通过设置环境变量 _TYPER_STANDARD_TRACEBACK=1
来一次性禁用它。
在初始化 typer
时,可以通过传递参数 pretty_exceptions_enable=False
来禁用丰富的异常:
import typer
app = typer.Typer(pretty_exceptions_enable=False)
@app.command()
def main():
raise Exception("test")
if __name__ == "__main__":
app()
查看文档以获取更多选项。
英文:
You can disable it on a one-off basis by setting the environment variable _TYPER_STANDARD_TRACEBACK=1
.
Disabling rich exceptions is possible by passing the kwarg pretty_exceptions_enable=False
when initializing typer
:
import typer
app = typer.Typer(pretty_exceptions_enable=False)
@app.command()
def main():
raise Exception("test")
if __name__ == "__main__":
app()
See the documentation for more options
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论