Python函数内变量IP出现Unresolved reference问题求助
搞定Unresolved reference:IP变量找不到的问题
嘿,我来帮你把这个IP变量的问题捋清楚!
为啥会报错?
你在get_ip()函数里定义的IP是局部变量——就像你自己卧室里的小物件,只有在卧室里(函数内部)能拿到,出了卧室(函数外面)的代码根本不知道它存在。虽然你调用了get_ip(),但没把函数返回的IP地址存到一个外面能访问的变量里,直接写IP自然会提示找不到啦。
简单解决办法
很容易,把函数返回的结果存到一个全局可用的变量里,然后用这个变量来构建你的列表就行:
修正后的完整代码
import socket import time # 假设你需要用到时间相关功能,记得导入模块 def get_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # 不需要真的能连通,只是用来触发系统返回本地IP s.connect(('10.255.255.255', 1)) IP = s.getsockname()[0] except: # 如果获取失败,默认用本地回环地址 IP = '127.0.0.1' finally: s.close() print(IP) return IP # 关键一步:调用函数,把返回的IP存到外部变量里 user_ip = get_ip() # 用这个外部变量构建你的列表,就不会报错啦 list_to_join = [time.strftime("%Y-%m-%d %H:%M:%S"), nameofhost, hostsname, message, clients_input, user_ip,] delimiter = '&&' datajoined = delimiter.join(list_to_join)
额外小提醒
- 注意哦:
time是模块名,如果你想加入的是具体的时间字符串,得改成time.strftime("%Y-%m-%d %H:%M:%S")这类格式的时间值,不然直接放模块名进去会导致后续join失败~ - 尽量别用
global关键字把IP变成全局变量,虽然能解决问题,但全局变量容易让代码逻辑变乱,用函数返回值存变量是更规范的写法。
内容的提问来源于stack exchange,提问作者Chenko
相关产品推荐
相关产品推荐

