我问这个是因为我有一些使用锁定文件的 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/