程序退出后继续执行

时间:2019-08-26 15:09:54

标签: python

从用户读取IP地址后,如果无效,我想退出。似乎在退出之前继续执行该函数中的代码。我希望它立即退出。我什至尝试在期望中使用quit()和exit(),但是都具有相同的结果。

功能:

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except socket.error as SE:
  raise SystemExit(SE)

 print 'Everything is OK!'

主要:

validation = f_validate_args(io_args)

print(io_args)

运行具有无效IP的程序:

Everything is OK
illegal IP address string passed to inet_aton

使用有效IP运行程序:

Everything is OK!
Namespace(...)

3 个答案:

答案 0 :(得分:0)

您可以尝试使用os.system软件包来杀死bash:

import os

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except socket.error as SE:
  os.system('pkill your_program_name')
  raise SystemExit(SE)

答案 1 :(得分:0)

可能有一些资源(与套接字相关的资源)阻止程序正常退出。

可能很脏,但一定可以工作:致电os._exit。它调用低级exit,而没有使用sys.exit使用的异常机制。

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except socket.error as SE:
  print(str(SE))
  os._exit(1)

 print('Everything is OK!')

当然,python没有机会正常退出。仅当您无法执行此操作时。

答案 2 :(得分:0)

提供无效的IP时,该函数将引发OSError。所以您需要抓住它

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except OSError:
  # your error handling here
 except socket.error as SE:
  raise SystemExit(SE)

 print 'Everything is OK!'

来源:https://docs.python.org/3/library/socket.html#socket.inet_aton