调用 sys.exit() 时正确完成 python 脚本的最佳方法是什么?
例如,我有一个应用程序: - 打开的日志文件 - 打开一些USB小工具 - 决定是时候关闭应用程序了 - 调用sys.exit(-1) - (或者它抛出严重的异常 - 但我更喜欢第一种方法,因为我有点小 pig ,并且代码的某些部分实际上捕获了所有异常,这将阻止我的终止异常...)
然后我需要一些 Finalize() 函数,该函数在退出解释器之前肯定会被调用。 Finalize() 将释放 USB 小工具并完全按照此顺序关闭日志文件。
我尝试了 def del 但它没有在 sys.exit 上调用,而且我无法决定调用 _del_s 的顺序。
有什么办法可以拯救我吗?或者我必须这样做: 1.最上面的try-catch-finally 2. 执行一些特定异常的退出 3. 每个异常捕获的各处都准确指定了我要捕获的内容?
最佳答案
请参阅 python 的 with
语句。
class UsbWrapper(object):
def __enter__(self):
#do something like accessing usb_gadget (& acquire lock on it)
#usb_gadget_handle = open_usb_gadget("/dev/sdc")
#return usb_gadget_handle
def __exit__(self, type, value, traceback):
#exception handling goes here
#free the USB(lock) here
with UsbWrapper() as usb_device_handle:
usb_device_handle.write(data_to_write)
无论代码抛出异常还是按需要运行,USB 锁总是被释放。
关于python - IronPython - sys.exit() 上的正确资源释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9022479/