gpt4 book ai didi

python - 使用有用的消息终止 Python 命令行脚本

转载 作者:行者123 更新时间:2023-12-01 02:36:46 25 4
gpt4 key购买 nike

如果要处理的数据不完全正确,我正在编写的脚本应该退出到 shell 提示符并显示一条有用的消息。用户应该修复标记的问题,直到脚本满意并且不再出现错误消息为止。我正在使用 TTD 开发脚本,因此我在编写函数之前编写了 pytest 测试。

most heavily up-voted answer here建议通过调用 sys.exit 或引发 SystemExit 来编辑脚本。

功能:

def istext(file_to_test):
try:
open(file_to_test).read(512)
except UnicodeDecodeError:
sys.exit('File {} must be encoded in UTF-8 (Unicode); try converting.'.format(file_to_test))

通过此测试(其中_non-text.png是PNG文件,即未以UTF-8编码):

def test_istext():
with pytest.raises(SystemExit):
istext('_non-text.png')

但是,脚本继续运行,并执行位于 try/except block 之后的语句。

我希望脚本每次都完全退出,以便用户可以调试数据,直到正确为止,并且脚本将执行它应该执行的操作(即处理充满 UTF-8 文本文件的目录,不是 PNG、JPG、PPTX...文件)。

还尝试过:

以下代码也通过引发 SystemExit 子类的异常来通过上述测试,但它也不会退出脚本:

def istext(file_to_test):
class NotUTF8Error(SystemExit): pass
try:
open(file_to_test).read(512)
except UnicodeDecodeError:
raise NotUTF8Error('File {} must be UTF-8.'.format(file_to_test))

最佳答案

您可以使用从异常中引发异常语法:

class MyException(SystemExit):
pass


def istext(file_to_test):
try:
open(file_to_test).read(512)
except UnicodeDecodeError as exception:
raise MyException(f'File {file_to_test} must be encoded in UTF-8 (Unicode); try converting.') \
from exception

在这种情况下,您不会更改原始错误消息并添加您自己的消息。

关于python - 使用有用的消息终止 Python 命令行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46133806/

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