Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果python中出现错误,则打印换行符_Python_Python 3.x_Stdout - Fatal编程技术网

如果python中出现错误,则打印换行符

如果python中出现错误,则打印换行符,python,python-3.x,stdout,Python,Python 3.x,Stdout,我有一些比较大的程序,我习惯于把它的进度打印到控制台上,每个函数只打印一行它在做某事时显示的输出。。。当函数运行时,有时会显示百分比栏并开始执行某些操作。。。当函数成功完成时完成。我申请“\r”、行清除等,以使我的进度条看起来漂亮。但是,当发生错误时,消息将继续执行同一行,这是我希望避免的。例如,我有一个代码: import os, sys, subprocess def some_function(filename): print('Doing something... ', end

我有一些比较大的程序,我习惯于把它的进度打印到控制台上,每个函数只打印一行它在做某事时显示的输出。。。当函数运行时,有时会显示百分比栏并开始执行某些操作。。。当函数成功完成时完成。我申请“\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
如果发生错误,是否有一些常规方法在输出中引入换行符?它也可能是一些内部或用户定义的异常

try:
    do stuff that might cause an error
except:
    print()
    raise
如果在try块中引发错误,这将打印新行,然后重新引发捕获的异常

编辑

正如评论中指出的,在这种情况下,错误消息不是由引发的异常生成的,因此我遵从Padraic的回答

如果在try块中引发错误,这将打印新行,然后重新引发捕获的异常

编辑


正如评论中指出的,在这种情况下,错误消息不是由引发的异常生成的,因此我遵从Padraic的回答。

调用不会引发异常,因此您可以使用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')

调用不会引发异常,因此您可以使用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')

这个电话不会引起争论exception@khelwood问题是子流程在stderr上输出消息,因此不会捕获任何内容。然后@padraiccnningham的answer wins.call不会引发错误exception@khelwood问题是子流程在stderr上输出消息,因此不会捕获任何内容。然后@padraiccnningham的答案获胜。