从用户读取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(...)
答案 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