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