【发布时间】:2021-06-01 20:06:42
【问题描述】:
所以首先我看到了类似的问题,但没有任何工作/不适用于我的问题。 我正在编写一个程序,该程序接收一个文本文件,其中包含要在 Youtube 上搜索的大量搜索查询。程序逐行遍历文本文件。但是这些具有无法解码的特殊 UTF-8 字符。所以在某个时刻,程序会以一个
UnicodeDecodeError:“charmap”编解码器无法解码位置 1826 中的字节 0x81:字符映射到
由于我无法检查输入的每一行,我希望它除了错误之外,打印它正在处理的行并在该点继续。 由于错误没有发生在我的 for 循环中,而是 for 循环本身,我不知道如何编写 try...except 语句。 这是代码:
import urllib.request
import re
from unidecode import unidecode
with open('out.txt', 'r') as infh,\
open("links.txt", "w") as outfh:
for line in infh:
try:
clean = unidecode(line)
search_keyword = clean
html = urllib.request.urlopen("https://www.youtube.com/results?search_query=" + search_keyword)
video_ids = re.findall(r"watch\?v=(\S{11})", html.read().decode())
outfh.write("https://www.youtube.com/watch?v=" + video_ids[0] + "\n")
#print("https://www.youtube.com/watch?v=" + video_ids[0])
except:
print("Error encounted with Line: " + line)
这是完整的错误消息,可以查看 for 循环本身导致了问题。
Traceback(最近一次调用最后一次): 文件“ytbysearchtolinks.py”,第 6 行,在 对于 infh 中的行: 解码中的文件“C:\Users\nfeyd\AppData\Local\Programs\Python\Python36\lib\encodings\cp1252.py”,第 23 行 返回 codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError:“charmap”编解码器无法解码位置 1826 中的字节 0x81:字符映射到
如果您需要我正在使用的输入示例:https://pastebin.com/LEkwdU06
【问题讨论】:
-
你的
try-except-block 看起来不错。我根据您的输入运行了您的代码(在没有unidecode的 Linux 上),它对我有用。 -
你是用我的粘贴做的吗?它是关于 Unicode 的,所以这很重要?
-
是的,我下载了文件并运行了与您在此处发布的完全相同的代码,唯一的区别是我没有导入和使用
unidecode。我得到了一个 YT 链接列表和一些错误,例如Error encounted with Line: Baianá+Bakermat,但它仍在继续。 -
我实现了 Unidecode 包,因为我想考虑这些,因为 'á' 被解码为 a。但其他角色不是。我的问题是为什么 try...except 没有捕获到这个错误。
-
我明白了。请在下面的答案中输入代码,它对我有用。
标签: python python-3.x for-loop exception try-catch