除了之后如何继续?
How to continue after except?
我在范围内循环以检查给定 IP 输入中的所有端口是否打开,或者某些端口套接字库无法识别它,所以它给我一个找不到端口的错误,
所以我使用 try 和 except 来更改错误代码,但我无法继续到下一个端口,脚本停止并且无法使用 continue with except 跳过该端口并检查下一个端口。
def all_ports():
target = input('Type The IP : ')
try:
for port in range(1 , 65,536):
s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.settimeout(1)
r = s.connect_ex((target , port))
if r == 0:
service = socket.getservbyport(port)
print(f'{port} is open !!!!!!!! , and service is {service}')
else:
service = socket.getservbyport(port)
print(f'{port} is closed !!!! and service is {service}')
s.close()
except:
print(f'we dont have port {port} in our system !')
您可以更改 for
和 try
的顺序,以仅围绕一个套接字连接而不是所有套接字连接进行异常处理,然后您的代码可以在一个套接字连接失败时恢复端口
def all_ports():
target = input('Type The IP : ')
for port in range(1, 65536):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
r = s.connect_ex((target, port))
service = socket.getservbyport(port)
if r == 0:
print(f'{port} is open !!!!!!!! , and service is {service}')
else:
print(f'{port} is closed !!!! and service is {service}')
s.close()
except:
print(f'We dont have port {port} in our system !')
我会通过简单地将 try 和 except 块放在 for 循环中来解决这个问题。
为简单起见,这里有一个针对这两种情况的简单示例:
不起作用
item_list = [1, 2, 3, "a", 5]
try:
for item in item_list:
item += 1 # will give error for "a" as it is not a number
print("item is:", item)
except:
print("wrong input")
输出:
item is: 2
item is: 3
item is: 4
wrong input
解决这个问题:
有效
for item in item_list:
try:
item += 1
print("item is:", item)
except:
print("wrong input")
输出:
item is: 2
item is: 3
item is: 4
wrong input
item is: 6
我在范围内循环以检查给定 IP 输入中的所有端口是否打开,或者某些端口套接字库无法识别它,所以它给我一个找不到端口的错误,
所以我使用 try 和 except 来更改错误代码,但我无法继续到下一个端口,脚本停止并且无法使用 continue with except 跳过该端口并检查下一个端口。
def all_ports():
target = input('Type The IP : ')
try:
for port in range(1 , 65,536):
s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.settimeout(1)
r = s.connect_ex((target , port))
if r == 0:
service = socket.getservbyport(port)
print(f'{port} is open !!!!!!!! , and service is {service}')
else:
service = socket.getservbyport(port)
print(f'{port} is closed !!!! and service is {service}')
s.close()
except:
print(f'we dont have port {port} in our system !')
您可以更改 for
和 try
的顺序,以仅围绕一个套接字连接而不是所有套接字连接进行异常处理,然后您的代码可以在一个套接字连接失败时恢复端口
def all_ports():
target = input('Type The IP : ')
for port in range(1, 65536):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
r = s.connect_ex((target, port))
service = socket.getservbyport(port)
if r == 0:
print(f'{port} is open !!!!!!!! , and service is {service}')
else:
print(f'{port} is closed !!!! and service is {service}')
s.close()
except:
print(f'We dont have port {port} in our system !')
我会通过简单地将 try 和 except 块放在 for 循环中来解决这个问题。
为简单起见,这里有一个针对这两种情况的简单示例:
不起作用
item_list = [1, 2, 3, "a", 5]
try:
for item in item_list:
item += 1 # will give error for "a" as it is not a number
print("item is:", item)
except:
print("wrong input")
输出:
item is: 2
item is: 3
item is: 4
wrong input
解决这个问题:
有效
for item in item_list:
try:
item += 1
print("item is:", item)
except:
print("wrong input")
输出:
item is: 2
item is: 3
item is: 4
wrong input
item is: 6