这是我在这里的第一篇文章,所以我不希望这不是错误的主题或其他内容,但我在编写的 Python 应用程序中遇到了一个有点不寻常的问题。
基本上,我要做的是从文本文件中读取并将其中的一部分插入到 Tkinter 文本小部件中。文本文件包含通常的“\n”换行符,但是当我运行代码时,我得到了这个奇怪的错误,我无法为以下问题制定解决方法:
(顺便说一句,很抱歉这里的设置很糟糕......不确定如何使用这个新的代码输入系统;它似乎“按自己的规则玩”并且有自己的语法,所以我只是在下面复制/粘贴它:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\idlelib\run.py", line 107, in main
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
File "C:\Python33\lib\queue.py", line 175, in get
raise Empty
queue.Empty
在处理上述异常的过程中,又出现了一个异常:
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1442, in __call__
return self.func(*args)
File "C:\Users\Owner\Desktop\Python projects\The Ultimate Joke Book.py", line 89, in search
results.create()
File "C:\Users\Owner\Desktop\Python projects\The Ultimate Joke Book.py", line 31, in create
joke = linecache.getline('Jokes/jokelist.txt',x)
File "C:\Python33\lib\linecache.py", line 15, in getline
lines = getlines(filename, module_globals)
File "C:\Python33\lib\linecache.py", line 41, in getlines
return updatecache(filename, module_globals)
File "C:\Python33\lib\linecache.py", line 127, in updatecache
lines = fp.readlines()
File "C:\Python33\lib\codecs.py", line 300, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 627: invalid start byte
所以导致问题的函数——只是一个for
循环中使用的“linecache.getline”——当文本中没有“\”时完美运行,但无论出于何种原因它不喜欢“\”并开始吐口水的错误。:/
所以今晚我在“文档”(http://docs.python.org/3/howto/unicode.html)上花了将近一个小时,阅读了 unicode 的所有历史和基本概念,但它加载了假设知识,虽然它在纯概念层面上提供信息和帮助,但在实际信息和潜在解决方案方面似乎并没有多大作用。
我能想出解决这个烦人的小错误的唯一解决方案是改用“/n”,并以编程方式将字符串拆分为一个数组(或在 Python 中调用的“列表”),然后使用循环将其分解为多于 1 行......但这听起来像是很多不必要的步骤,特别是如果已经存在一个常见的解决方法。因此,我将不胜感激有关如何解决这个特别神秘的问题的任何见解。
谢谢。