gpt4 book ai didi

python - 对待 try 和 except 相同

转载 作者:行者123 更新时间:2023-12-03 12:03:45 26 4
gpt4 key购买 nike

我正在写一些东西来检查端口是否打开,但要修改它以供我使用。

我为检查设置了超时,如果超时达到它会引发 socket.timeout异常,但我想要 try 中的代码块也可以在 socket.timeout 上调用:

try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
result = sock.connect_ex((check_server_ip, check_port))
if result == 0:
# act on open port
else:
# act on closed port
sock.close()
except socket.timeout:
# act on closed port

我在 # act on closed port 上的代码块长。我可以创建一个包含代码的函数并在 else 上调用它声明和 socket.timeout异常(exception),但我敢打赌 python 有更聪明的东西。

有什么可以做到这一点?

最佳答案

我认为你在这里不需要聪明或神奇的东西。我查看了您的代码,然后输入了 python -c "import this"在我的终端中,看到了这一点:

Flat is better than nested.



因此,您无需在 try ... except timeout 中创建、设置超时和关闭套接字。 - 没有什么会引发超时:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)

try:
result = sock.connect_ex((check_server_ip, check_port))
socket_connected = result == 0
except socket.timeout:
socket_connected = False

if socket_connected:
do_connected_stuff()
else:
do_disconnected_stuff()

sock.close()

但是,这段代码的正确性实际上取决于 do_connected_stuff()可以扔 socket.timeout如果 do_disconnected_stuff()在这种情况下是一个有意义的 Action 。如果所有问题都是肯定的,那么你已经有了一个非常优化的结构——至少没有你的系统的完整 View 。

关于python - 对待 try 和 except 相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47692684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com