GVKun编程网logo

Python-如何在不停止程序的情况下打印完整的回溯?(python循环打印不换行)

18

本文将分享Python-如何在不停止程序的情况下打印完整的回溯?的详细内容,并且还将对python循环打印不换行进行详尽解释,此外,我们还将为大家带来关于bash–如何在不停止写入终端的情况下复制st

本文将分享Python-如何在不停止程序的情况下打印完整的回溯?的详细内容,并且还将对python循环打印不换行进行详尽解释,此外,我们还将为大家带来关于bash – 如何在不停止写入终端的情况下复制stderr?、linux – 如何在不停止的情况下将作业发送到后台?、Python-如何在不截断的情况下打印完整的NumPy数组?、ScheduledExecutorService,如何在不停止执行程序的情况下停止操作?的相关知识,希望对你有所帮助。

本文目录一览:

Python-如何在不停止程序的情况下打印完整的回溯?(python循环打印不换行)

Python-如何在不停止程序的情况下打印完整的回溯?(python循环打印不换行)

我正在编写一个程序,该程序可以解析10个网站,找到数据文件,保存文件,然后解析它们以生成可以在NumPy库中轻松使用的数据。有万吨通过不良链接,不好的XML,缺项,其他的事情我还没有进行分类文件遇到错误的。我最初制作该程序来处理如下错误:

try:    do_stuff()except:    pass

但是现在我想记录错误:

try:    do_stuff()except Exception, err:    print Exception, err

请注意,这是打印到日志文件中以供以后查看。这通常会打印出非常无用的数据。我想要的是在错误触发时打印完全相同的行,而没有try-except拦截异常,但是我不希望它暂停我的程序,因为它嵌套在我想要的一系列for循环中看到完成。

答案1

小编典典

其他一些答案已经指出了追溯模块。

请注意,使用print_exc,在某些特殊情况下,你将无法获得预期的结果。在Python 2.x中:

import tracebacktry:    raise TypeError("Oups!")except Exception, err:    try:        raise TypeError("Again !?!")    except:        pass    traceback.print_exc()

…将显示最后一个异常的回溯:

Traceback (most recent call last):  File "e.py", line 7, in <module>    raise TypeError("Again !?!")TypeError: Again !?!

如果你确实需要访问原始的回溯,一种解决方案是将异常信息从exc_info本地变量中返回,并使用来显示它print_exception

import tracebackimport systry:    raise TypeError("Oups!")except Exception, err:    try:        exc_info = sys.exc_info()        # do you usefull stuff here        # (potentially raising an exception)        try:            raise TypeError("Again !?!")        except:            pass        # end of useful stuff    finally:        # Display the *original* exception        traceback.print_exception(*exc_info)        del exc_info

输出:

Traceback (most recent call last):  File "t.py", line 6, in <module>    raise TypeError("Oups!")TypeError: Oups!

与此相关的一些陷阱:

从文档sys_info

在处理异常的函数中将回溯返回值分配给局部变量将导致循环引用。这将防止垃圾回收由同一函数中的局部变量或回溯引用的任何内容。[…] 如果确实需要回溯,请确保在使用后将其删除(最好通过try … finally语句完成)

但是,根据同一文档:

从Python 2.2开始,启用垃圾回收并且无法访问时,会自动回收此类循环,但是避免创建循环仍然更加有效。

另一方面,通过允许你访问与异常关联的回溯,Python 3产生了一个不太令人惊讶的结果:

import tracebacktry:    raise TypeError("Oups!")except Exception as err:    try:        raise TypeError("Again !?!")    except:        pass
traceback.print_tb(err.__traceback__)

…将显示:

  File "e3.py", line 4, in <module>    raise TypeError("Oups!")

bash – 如何在不停止写入终端的情况下复制stderr?

bash – 如何在不停止写入终端的情况下复制stderr?

我想编写一个运行命令的 shell脚本,在它到达时将其stderr写入终端.但是,我还想将stderr保存到变量中,以便稍后检查.

我怎样才能做到这一点?我应该使用T恤,子壳还是其他东西?

我试过这个:

# Create FD 3 that can be used so stdout still comes through 
exec 3>&1

# Run the command,piping stdout to normal stdout,but saving stderr.
{ ERROR=$( $@ 2>&1 1>&3) ; }

echo "copy of stderr: $ERROR"

但是,这不会将stderr写入控制台,它只会保存它.

我也尝试过:

{ $@; } 2> >(tee stderr.txt >&2 )

echo "stderr was:"
cat stderr.txt

但是,我不想要临时文件.

解决方法

归功于@Etan Reisner关于该方法的基本原理;但是,最好将tee与/ dev / stderr而不是/ dev / tty一起使用以保持正常行为(如果发送到/ dev / tty,外部世界不会将其视为stderr输出,并且既不能捕获也不压抑它):

这是完整的成语:

exec 3>&1   # Save original stdout in temp. fd #3.
# Redirect stderr to *captured* stdout,send stdout to *saved* stdout,also send
# captured stdout (and thus stderr) to original stderr.
errOutput=$("$@" 2>&1 1>&3 | tee /dev/stderr)
exec 3>&-   # Close temp. fd.

echo "copy of stderr: $errOutput"

linux – 如何在不停止的情况下将作业发送到后台?

linux – 如何在不停止的情况下将作业发送到后台?

Ctrl z将当前作业发送到后台,但会将其停止.

以及如何恢复停工?

解决方法

你可以运行“bg”在后台运行它.

“fg”将它移动到前台

请注意,bg和fg采用作业#而不是PID,因此如果您一次运行多个作业,请使用“jobs”命令获取作业编号.

Python-如何在不截断的情况下打印完整的NumPy数组?

Python-如何在不截断的情况下打印完整的NumPy数组?

当我打印一个numpy数组时,我得到了一个截断的表示形式,但是我想要完整的数组。

有什么办法吗?

例子:

>>> numpy.arange(10000)array([   0,    1,    2, ..., 9997, 9998, 9999])>>> numpy.arange(10000).reshape(250,40)array([[   0,    1,    2, ...,   37,   38,   39],       [  40,   41,   42, ...,   77,   78,   79],       [  80,   81,   82, ...,  117,  118,  119],       ...,        [9880, 9881, 9882, ..., 9917, 9918, 9919],       [9920, 9921, 9922, ..., 9957, 9958, 9959],       [9960, 9961, 9962, ..., 9997, 9998, 9999]])

答案1

小编典典

用途numpy.set_printoptions:

import sysimport numpynumpy.set_printoptions(threshold=sys.maxsize)

ScheduledExecutorService,如何在不停止执行程序的情况下停止操作?

ScheduledExecutorService,如何在不停止执行程序的情况下停止操作?

我有以下代码:

ScheduledExecutorService scheduledExecutor;
.....
ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay(
    new SomethingDoer(),measurmentPeriodMillis,TimeUnit.MILLISECONDS);

在发生某些事件之后,我应该停止在的run()方法中声明的操作,该方法SomethingDoer实现Runnable

我怎样才能做到这一点?我无法关闭执行器,只能撤消我的定期任务。我可以用result.get()吗?如果可以的话,请告诉我它将如何工作。

今天关于Python-如何在不停止程序的情况下打印完整的回溯?python循环打印不换行的介绍到此结束,谢谢您的阅读,有关bash – 如何在不停止写入终端的情况下复制stderr?、linux – 如何在不停止的情况下将作业发送到后台?、Python-如何在不截断的情况下打印完整的NumPy数组?、ScheduledExecutorService,如何在不停止执行程序的情况下停止操作?等更多相关知识的信息可以在本站进行查询。

本文标签: