如果&否则都打印...我在做什么错

时间:2019-01-23 17:47:03

标签: python-3.x

if和else print()都显示为结果。 python的新手,只需要正确的基础知识

任何帮助都会很棒。

if test_choice == '1':
    print("You have chosen to test Device & Softphone HTTP to Horizon")
    for port in '80':
        result = sock.connect_ex(('88.215.61.173', 80))
        if result == 0:
            print("Port 80 is open to xsp.unlimitedhorizon.co.uk")
        else:
            print("Port 80 timeout. Please check firewall")

如果result == 0,则else:都将打印结果。...

结果如下:

You have chosen to test Device & Softphone HTTP to Horizon
Port 80 is open to xsp.unlimitedhorizon.co.uk
Port 80 timeout. Please check firewall

3 个答案:

答案 0 :(得分:2)

在您的for循环中,端口的值为'8',然后为'0'。我猜你不想要什么。

将for循环替换为

for port in ['80']:
     # Do Stuff

端口将只取一个值('80'),因此仅迭代一次

在您的模块中,您需要将port设置为int。做for port in [80]

甚至更好

答案 1 :(得分:1)

@BlueSheepToken是正确的,循环for port in '80':使端口变量以8然后以0作为值。这是因为在python中:

  

字符串是不可变的序列

序列是iterable

因此,在第一次运行result = sock.connect_ex(('88.215.61.173', 80))中连接成功,因此结果等于0,这就是为什么第一次打印为Port 80 is open to xsp.unlimitedhorizon.co.uk的原因。 在第二次运行中,连接已经建立,因此sock.connect_ex失败,您得到了第二张打印纸。

是的,如果您确实需要测试多个端口,则可以将端口放在列表中,但是您也必须使用port变量:

for port in [80]:
    result = sock.connect_ex(('88.215.61.173', port))

但是,如果您只需要测试一个端口,则可以删除for循环。

答案 2 :(得分:-2)

在这段代码中,您不需要那个forfor port in '80':)。尝试删除它。