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
答案 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)仅产生一个值。