如果在python中发生错误,则打印换行符

时间:2014-10-28 10:37:49

标签: python python-3.x stdout

我有一些相对较大的程序,我曾经以每个功能只打印一行输出的方式将其进度打印到控制台(它显示"做某事......"同时功能正在运行(有时它会显示百分比条)并转向"做某事...完成"当功能成功完成时。我为我申请了' \ r',线路清关等进度条看起来不错。但是,当发生错误时,消息继续在同一行,我想避免。例如我有一个代码:

import os, sys, subprocess
def some_function(filename):
    print('Doing something... ', end = '')
    sys.stdout.flush()
    with open(os.devnull, 'wb') as devnull:
        check = subprocess.call(['ls', filename], stdout = devnull)
        if check != 0:
            sys.exit(1)
    print('Done')
some_function('some.file')

它产生以下输出(取决于是否存在错误):

Doing something... Done

Doing something... ls: some.file: No such file or directory

我想在错误的情况下看到:

Doing something... 
ls: some.file: No such file or directory

如果出现错误,是否有一些通用的方法在输出中引入换行符(也可能是某些内部或用户定义的异常)?

2 个答案:

答案 0 :(得分:4)

call不会引发异常,因此您可以使用stderr捕获子进程的错误:

import os, sys, subprocess
def some_function(filename):
    print('Doing something... ', end='')
    sys.stdout.flush()
    with open(os.devnull, 'wb') as devnull:
        check = subprocess.Popen(['ls', filename], stdout = devnull, stderr=subprocess.PIPE)
        stdout, stderr = check.communicate()
        if stderr:
            print("\n{}".format(stderr.decode("utf-8")))
            sys.exit(1)
    print('Done')

答案 1 :(得分:1)

try:
    do stuff that might cause an error
except:
    print()
    raise

如果在try块内引发错误,则会打印一个新行,然后重新引发捕获的异常。

修改

正如评论中指出的那样,在这种情况下,错误消息不是由引发的异常生成的,所以我按照Padraic的回答。