Python 为什么在赋值之前要引用局部变量?
我得到了一个错误,我花了几个小时试图理解为什么会发生这种情况,但我无法理解 以下是我的代码,在我断开internet之前,它可以正常工作,没有任何问题(这就是为什么我在internet断开连接时破例继续重试),当internet断开连接时,异常将继续调用该函数,当internet返回时,它将继续该函数,但随后抛出一些错误: [Errno-2]名称或服务未知 UnboundLocalError:赋值前引用的局部变量“ip”Python 为什么在赋值之前要引用局部变量?,python,python-3.x,exception,Python,Python 3.x,Exception,我得到了一个错误,我花了几个小时试图理解为什么会发生这种情况,但我无法理解 以下是我的代码,在我断开internet之前,它可以正常工作,没有任何问题(这就是为什么我在internet断开连接时破例继续重试),当internet断开连接时,异常将继续调用该函数,当internet返回时,它将继续该函数,但随后抛出一些错误: [Errno-2]名称或服务未知 UnboundLocalError:赋值前引用的局部变量“ip” from time import sleep from requests_
from time import sleep
from requests_html import HTMLSession
public_ip = ""
def get_ip():
global public_ip
session = HTMLSession()
try:
ip = session.get('https://api.ipify.org').text
except:
print("Exception started... Retrying")
sleep(10)
get_ip()
if ip == public_ip:
print("It's the same")
else:
print("new IP")
print("Old " + public_ip)
print(ip)
public_ip = ip
print("new " + public_ip)
while True:
get_ip()
sleep(10)
当没有internet时,变量
ip
的赋值不起作用,这就是为什么会出现错误,请尝试在try语句之前初始化变量ip:
def get_ip():
global public_ip
session = HTMLSession()
ip = ""
try:
ip = session.get('https://api.ipify.org').text
except:
print("Exception started... Retrying")
sleep(10)
get_ip()
...
假设您点击了除之外的
,则未分配
ip。然后递归调用get\u ip
,然后在某个点返回,在这种情况下,如果ip==public\u ip,代码将移到,但它仍然没有定义。首先,我会避免递归。。。使用循环。或者,只需将ip
初始化为None
或一些有意义的默认值