python - python程序可以通过哪些方式终止而不抛出异常?

标签 python

我问这个是因为我有一些使用锁定文件的 python 代码,我想知道在哪些情况下程序可以终止而不抛出异常(或以无法处理的方式结束),随后会有无需处理,必须手动删除锁定文件。我想做这样的事情:

try:
    % Check if lock file exists; if not, create it, do some processing, etc...
finally:
    % Process ended --or-- possibly exception thrown; clean up lock file

例如,ctrl+c 可以被异常处理,破管道可以被异常处理,等等......

我能想到的唯一一种程序可以毫无异常(exception)地终止的情况是计算机的电源被关闭。在这种情况下,我可以编写一个脚本来在启动时清除所有锁定文件。还有其他的吗?

编辑: 意思是说“锁定文件”而不是“标记文件”

最佳答案

os._exit 会立即终止程序,但不鼓励使用它...

其他情况涉及用户发送 SIGKILL (*NIX),或电源关闭或某种操作系统内核崩溃,或您的计算机从二楼窗口掉出......


请注意,如果您有想要删除的锁定文件,实现相同安全级别的等效(并且可能更惯用的方法)是使用上下文管理器。 contextlib 可以帮助解决这个问题:

import contextlib

@contextlib.contextmanager
def lock():
    try:
       create_lock()
       yield 'whatever you want'
    finally:
       remove_lock()

用法如下:

with lock() as x:
    assert x == 'whatever you want'
    do_stuff_with_lock_safety()

显然,这并不比您最初使用 try/finally 的想法更安全(这也是我正在使用的)——但是每次使用时输入的次数更少,并且如果上下文管理器是您创建/删除锁的唯一方式,然后用户不需要记住如何自己清理,因为上下文管理器会为您完成。

关于python - python程序可以通过哪些方式终止而不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943665/

相关文章:

python - 如何判断getLogger是否创建了一个新对象?

python - 使用 Cross tab (spark dataframe) 的结果在 SparkMlib 中进行卡方检验

Python:如何使用正则表达式对字典值进行排序

python - 检索在 python 中使用 javascript 创建的 cookie

python - 类型错误 : ("sort_values() got multiple values for argument ' axis '", ' occurred at index SUMLEV')

python - 嵌套函数中奇怪的作用域

python - 从列表中删除字典的子集

Python 替换为重用未知字符串

python - 锁定 Jupyter Notebook 中的 Python 代码并使其作为命令可执行

python - 如何使用 python 生成特定的嵌套 JSON