pjz*_*pjz 1312
import sys
sys.exit()
Run Code Online (Sandbox Code Playgroud)
sys模块文档中的详细信息:
sys.exit([arg])退出Python.这是通过引发
SystemExit异常来实现的 ,因此最终的try语句子句指定的清理操作得到遵守,并且可以拦截外层的退出尝试.可选参数arg可以是一个整数,给出退出状态(默认为零)或其他类型的对象.如果它是整数,则零被认为是"成功终止",并且任何非零值被贝壳等视为"异常终止".大多数系统要求它在0-127范围内,否则会产生不确定的结果.有些系统有一个约定,用于为特定的退出代码分配特定的含义,但这些通常是不发达的; Unix程序通常使用2表示命令行语法错误,1表示所有其他类型的错误.如果传递了另一种类型的对象,则None等效于传递零,并且打印任何其他对象
stderr并导致退出代码为1.特别是sys.exit("some error message")发生错误时退出程序的快速方法.由于
exit()最终"only"引发了一个异常,它只会在从主线程调用时退出进程,并且异常不会被截获.
请注意,这是退出的"好方法".@ glyphtwistedmatrix低于指出,如果你想要一个"硬退出",你可以使用os._exit(错误代码),但它很可能与操作系统相关的在一定程度上(也许它不会在Windows下一个错误代码,例如),它肯定是不太友好,因为它不会让解释程序在进程死亡之前进行任何清理.
j.m*_*g.r 307
提前终止Python脚本的一种简单方法是使用内置函数quit().无需导入任何库,它既高效又简单.
例:
#do stuff
if this == that:
quit()
Run Code Online (Sandbox Code Playgroud)
Vha*_*run 116
另一种方式是:
raise SystemExit
Run Code Online (Sandbox Code Playgroud)
小智 66
你也可以简单地使用exit().
请记住sys.exit(),exit(),quit(),和os._exit(0) 杀 Python解释器.因此,如果它出现在从另一个脚本调用的脚本中execfile(),则会停止执行这两个脚本.
请参阅" 停止执行使用execfile调用的脚本 "以避免这种情况.
Gly*_*yph 64
虽然你通常应该更喜欢,sys.exit因为它对其他代码更"友好",但实际上所做的只是引发异常.
如果你确定你需要立即退出一个进程,并且你可能在一个可以捕获的异常处理程序中,那么SystemExit还有另一个函数os._exit- 它会立即终止于C级并且不会执行任何正常的拆除翻译; 例如,不执行使用"atexit"模块注册的挂钩.
eay*_*din 29
我刚刚发现了写multithreadded的应用程序时,raise SystemExit和sys.exit()两个只有杀死正在运行的线程.另一方面,os._exit()退出整个过程.这在这里讨论过.
以下示例有2个线程.肯尼和卡特曼.卡特曼应该永远活着,但肯尼被称为递归,并且应该在3秒后死亡.(递归调用不是最好的方法,但我有其他原因)
如果我们也希望卡特曼在肯尼去世时死去,肯尼应该离开os._exit,否则,只有肯尼会死,卡特曼将永远活着.
import threading
import time
import sys
import os
def kenny(num=0):
if num > 3:
# print("Kenny dies now...")
# raise SystemExit #Kenny will die, but Cartman will live forever
# sys.exit(1) #Same as above
print("Kenny dies and also kills Cartman!")
os._exit(1)
while True:
print("Kenny lives: {0}".format(num))
time.sleep(1)
num += 1
kenny(num)
def cartman():
i = 0
while True:
print("Cartman lives: {0}".format(i))
i += 1
time.sleep(1)
if __name__ == '__main__':
daemon_kenny = threading.Thread(name='kenny', target=kenny)
daemon_cartman = threading.Thread(name='cartman', target=cartman)
daemon_kenny.setDaemon(True)
daemon_cartman.setDaemon(True)
daemon_kenny.start()
daemon_cartman.start()
daemon_kenny.join()
daemon_cartman.join()
Run Code Online (Sandbox Code Playgroud)
cle*_*leg 27
from sys import exit
exit()
Run Code Online (Sandbox Code Playgroud)
作为参数,您可以传递退出代码,退出代码将返回给操作系统.默认值为0.
Art*_*yan 18
在我的实践中,甚至存在一种情况,需要从其中一个进程中终止整个多处理器应用程序。
如果您的应用程序使用唯一的主进程,则以下函数可以很好地工作。但以下功能没有一个在我的情况下不起作用,因为应用程序还有许多其他活动进程。
quit()exit(0)os._exit(0)sys.exit(0)os.kill(os.getppid(), 9)-父进程的pidos.getppid()在哪里最后一个进程杀死了主进程及其自身,但其余进程仍然存在。
我不得不通过外部命令杀死它,最后使用 找到了解决方案pkill。
import os
# This can be called even in process worker and will kill
# whole application included correlated processes as well
os.system(f"pkill -f {os.path.basename(__file__)}")
Run Code Online (Sandbox Code Playgroud)
Flo*_*rse 17
我是一个新手,但肯定是更干净,更有控制力
def main():
try:
Answer = 1/0
print Answer
except:
print 'Program terminated'
return
print 'You wont see this'
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
...
程序终止
比
import sys
def main():
try:
Answer = 1/0
print Answer
except:
print 'Program terminated'
sys.exit()
print 'You wont see this'
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
...
程序终止跟踪(最近一次调用最后一次):文件"Z:\ Directory\testdieprogram.py",第12行,在main()文件"Z:\ Directory\testdieprogram.py",第8行,在主sys.exit中( )SystemExit
编辑
关键是程序平稳而平静地结束,而不是"我已经停止!!!!"
在Python 3.5中,我尝试在不使用模块(例如sys,Biopy)的情况下合并类似的代码,而不是内置的内容来停止脚本并向用户输出错误消息.这是我的例子:
## My example:
if "ATG" in my_DNA:
## <Do something & proceed...>
else:
print("Start codon is missing! Check your DNA sequence!");
exit(); ## as most folks said above
Run Code Online (Sandbox Code Playgroud)
后来,我发现抛出错误更简洁:
## My example revised:
if "ATG" in my_DNA:
## <Do something & proceed...>
else:
raise ValueError("Start codon is missing! Check your DNA sequence!");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1390990 次 |
| 最近记录: |