索引范围的一些问题,python 学生项目?
some issues with index range, python student project?
def f3():
root.withdraw()
viewest.deiconify()
#import cx_Oracle
con=None
cursor=None
try:
con=cx_Oracle.connect("system/abc123")
cursor=con.cursor()
sql="select * from students"
cursor.execute(sql)
msg=""
for d in data:
msg=msg+" R: "+ str(d[0]) + " N: " + str(d[1])+" M: " + str(d[2])+ "\n"
stData.insert(INSERT,msg)
except cx_Oracle.DatabaseError as e:
print("some issues",e)
finally:
if cursor is not None:
cursor.close()
if con is not None:
con.close()
print("Disconnected")
'''IndexError: string index out of range , msg=msg+" R: "+ str(d[0]) + " N: " + str(d[1])+" M: " + str(d[2])+ "\n" '''
很难说出您要在这里做什么,但是 data
的数据类型是什么?看起来你没有通过 try
语句(很好地使用 try/except 来处理异常!)所以我认为问题在于你索引项目的方式(d
) 在 data
。想一想:如果 data
不存在(意味着您没有在代码中初始化它供您的程序使用),您以后如何尝试索引它?另外,你没有得到 NameError
很奇怪,因为我没有看到 data
在任何地方定义,除非你在它之前定义的地方裁剪掉(除非我的眼睛在欺骗我)。
通用编程原则:
- 可迭代对象:
String
、List
、Dictionary
等...
- 不可迭代对象:
Integer
、Float
、Boolean
等...(取决于编程语言)
可迭代数据类型是您可以使用括号表示法 ([]
) 进行索引的数据类型,因此在任何情况下,您都需要知道变量的类型,然后使用正确的 "processes"与他们一起工作。由于您正在索引 data
中的项目,因此 data
的数据类型也需要是可迭代的。
一般来说,IndexError
表示您已尝试 access/index 列表中的某个项目,但该项目不存在。因此,我认为尝试对一个不存在的对象中的项目进行字符串化和索引会导致该错误。
以下是我认为会有所帮助的内容:
如果我能看到你在哪里定义了 data
,我就能告诉你哪里可能出错了,但现在,我只能建议你回去看看你是否已经在 data
的 d
中索引了一个不存在的项目。
一个例子(为了清楚起见,我假设 data
是一个列表):
>>> data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> data[0] # index a list in d in data
[1, 2, 3]
>>> data[0][1]
2
# If you try to access an index in data that doesn't exist:
>>> data[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
我现在可能解释过度了,所以我就在这里结束吧。上面的实现是为了让您了解如何正确访问列表中的列表,以及如果操作不当会发生什么情况。希望这是清楚的!
def f3():
root.withdraw()
viewest.deiconify()
#import cx_Oracle
con=None
cursor=None
try:
con=cx_Oracle.connect("system/abc123")
cursor=con.cursor()
sql="select * from students"
cursor.execute(sql)
msg=""
for d in data:
msg=msg+" R: "+ str(d[0]) + " N: " + str(d[1])+" M: " + str(d[2])+ "\n"
stData.insert(INSERT,msg)
except cx_Oracle.DatabaseError as e:
print("some issues",e)
finally:
if cursor is not None:
cursor.close()
if con is not None:
con.close()
print("Disconnected")
'''IndexError: string index out of range , msg=msg+" R: "+ str(d[0]) + " N: " + str(d[1])+" M: " + str(d[2])+ "\n" '''
很难说出您要在这里做什么,但是 data
的数据类型是什么?看起来你没有通过 try
语句(很好地使用 try/except 来处理异常!)所以我认为问题在于你索引项目的方式(d
) 在 data
。想一想:如果 data
不存在(意味着您没有在代码中初始化它供您的程序使用),您以后如何尝试索引它?另外,你没有得到 NameError
很奇怪,因为我没有看到 data
在任何地方定义,除非你在它之前定义的地方裁剪掉(除非我的眼睛在欺骗我)。
通用编程原则:
- 可迭代对象:
String
、List
、Dictionary
等... - 不可迭代对象:
Integer
、Float
、Boolean
等...(取决于编程语言)
可迭代数据类型是您可以使用括号表示法 ([]
) 进行索引的数据类型,因此在任何情况下,您都需要知道变量的类型,然后使用正确的 "processes"与他们一起工作。由于您正在索引 data
中的项目,因此 data
的数据类型也需要是可迭代的。
一般来说,IndexError
表示您已尝试 access/index 列表中的某个项目,但该项目不存在。因此,我认为尝试对一个不存在的对象中的项目进行字符串化和索引会导致该错误。
以下是我认为会有所帮助的内容:
如果我能看到你在哪里定义了 data
,我就能告诉你哪里可能出错了,但现在,我只能建议你回去看看你是否已经在 data
的 d
中索引了一个不存在的项目。
一个例子(为了清楚起见,我假设 data
是一个列表):
>>> data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> data[0] # index a list in d in data
[1, 2, 3]
>>> data[0][1]
2
# If you try to access an index in data that doesn't exist:
>>> data[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
我现在可能解释过度了,所以我就在这里结束吧。上面的实现是为了让您了解如何正确访问列表中的列表,以及如果操作不当会发生什么情况。希望这是清楚的!