为什么输出为“ p未定义”?

时间:2019-08-04 17:37:50

标签: python-3.x

import socket              # Import socket module

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)         # Create a 
socket object

host = socket.gethostbyname("www.itsecgames.com")

global port

for port in range(0,1):
    try :
        connect = s.connect((host,port))
        print("Port [",port,"] : Connection accepted.")
        global p 
        p = port
    except :
        print("Port [",port,"] : Connection refused.")
w = p

print(w)

我知道了

w = p
NameError: name 'p' is not defined

2 个答案:

答案 0 :(得分:2)

只能when connect throws重现该问题。

这是因为在这种情况下,您从未设置p。由于您从未设置过p,并且直到您设置了w = p才在全局范围内,所以w无效。

考虑给它一些初始值,或者跳过整个connect,除非建立连接。

具体地说,在这种情况下,您的onDayChange调用引发的原因是您试图连接到端口0上的网站。HTTP网页通常可以在端口80上访问。

答案 1 :(得分:2)

全局变量在这里无关紧要,通常应在Python中避免使用。在简化的示例中,可以清楚地看到except-part使p未定义:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.connect.systems.ng.travelmantics, PID: 7882
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
        at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:249)
        at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:182)
        at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:520)
        at androidx.appcompat.app.AppCompatActivity.invalidateOptionsMenu(AppCompatActivity.java:245)
        at com.connect.systems.ng.travelmantics.ListActivity.showMenu(ListActivity.kt:67)
        at com.connect.systems.ng.travelmantics.FirebaseUtil$Companion$checkAdmin$1.onChildAdded(FirebaseUtil.kt:87)
        at com.google.firebase.database.core.ChildEventRegistration.fireEvent(com.google.firebase:firebase-database@@18.0.1:79)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@18.0.1:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@18.0.1:55)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7343)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:933)

治愈很简单:

global port

for port in range(0, 1):
    try:
        #global p
        0 / 0
        p = port
    except:
        print("Port [",port,"] : Connection refused.")
w = p

print(w)

循环之前。

更多说明:range(0,1)仅产生一个值。