如何使用“ with”上下文管理器重做我的代码?
第一部分就像我想要的那样工作。但是,当我尝试使用with
上下文管理器转换代码时,再次出现此错误。
output = wp.decode('utf-8')
AttributeError: 'function' object has no attribute 'decode'
from urllib.request import Request, urlopen
import re
url = 'https://www.timereaction.com/' # Blocked by mod_security
# FIRST part OK
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
webpage = urlopen(req).read()
# print(webpage)
output = webpage.decode('utf-8')
keyword = re.findall('Login', output)
if keyword:
print(keyword)
else:
print('EMPTY')
# SECOND part doesn't work :(
'''
def check_keyword():
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
with urlopen(req) as webpage:
wp = webpage.read
output = wp.decode('utf-8')
keyword = re.findall('login', output)
if keyword:
print(keyword)
else:
print('EMPTY')
check_keyword()
'''
答案 0 :(得分:4)
您将括号放在wp = webpage.read
的结尾。
答案 1 :(得分:1)
您已在with
块中编写了此代码:
wp = webpage.read
output = wp.decode('utf-8')
因此wp
被分配了一个函数,因此它没有任何decode
属性。
您必须使用括号来调用函数read
,以便为wp
分配一个字符串,如下所示:
wp = webpage.read()
output = wp.decode('utf-8')
它有效。