python - 名称列表非定义
问题描述
当我运行此代码时,我收到错误“NameError: name 'w' is not defined”
q = open("programma", "r")
q = q.read()
time.sleep(0.5)
print("estrapolazione programma")
a = -1
s = 0
w = [""]
par = [""]
for s in q:
a += 1
if q[a] == ".":
s = w
par.append("".join(s))
del w
else:
w.append(q[a])
print(par)
我不明白为什么它告诉我w
没有定义在w.append(q[a])
上面,当它在上面定义了 9 行时。
解决方案
因为您del w
在其中一个分支中,所以会删除变量本身,因此如果在任何不是最后一次的迭代中采用该分支,则下一次迭代将通过尝试在未定义w.append
的 a 上中断,或者因为您w
再试del w
一次。
一半的程序真的没有意义,你正在迭代,q
但你没有使用结果,而是在删除前者之前分配w
给(你的迭代变量)?s
s
和 是一样的q[a]
,所以不需要a
,直接使用s
即可,一般不需要初始化循环变量,一般也不应该给它赋值- 如果您想清除
w
,请按字面意思执行,您可以使用w.clear()
, 或del w[:]
- 或者,您可以为其分配一个新的空列表,这
w = []
无关紧要,但在某些情况下确实如此 - 顺便说一句,我没有看到初始化
w
到包含空字符串的列表的意义,因为您加入了一个空字符串"".join([])
并且"".join([''])
具有相同的结果,并且您永远不会测试它是否为空 - 虽然在这里并不重要,但在使用文件后关闭文件也是一种好习惯,并且在使用“文本模式”文件 IO 明确指定编码时
这里有一些清理:
with open('programma', 'r', encoding='utf-8') as f:
contents = f.read()
time.sleep(0.5)
print("estrapolazione programma")
word = []
par = []
for char in contents:
if char == '.':
par.append(''.join(word))
word = [] # or w.clear()
else:
word.append(char)
print(par)
顺便说一句,整个事情都可以写成
par = contents.split('.')
推荐阅读
- react-native - 如何将支付集成到来自 QR 码扫描仪数据的 React Native
- google-cloud-platform - Terraform - GCP - 连接:连接被拒绝
- socket.io - socketIO 中的响应事件是否有任何命名约定?
- magento - 切换主页语言
- python - a 和 b 的导数,使用算法微分
- android - ashmem 给予 [Errno 13] 权限被拒绝
- python - 从多个 JSON 文件中提取特定元素并添加到单个 Excel 中
- google-apps-script - 来自 Webhook 的 WebApp postData 间歇性地将 Google 从 Missive 空白到 Google Apps 脚本
- android - 将 Ionic 限制为仅限 Android 上的智能手机设备
- python - 如何诊断为什么我的 python 内核死了?