显示报错TypeError: write() argument must be str, not None
Traceback (most recent call last):
File "H:\Pycharm\Project\Python\Novel\Novel.py", line 73, in
main(url)
File "H:\Pycharm\Project\Python\Novel\Novel.py", line 69, in main
save(name, novel_content[0], novel_content[1]) # 调用了保存函数
File "H:\Pycharm\Project\Python\Novel\Novel.py", line 54, in save
f.write(title)
TypeError: write() argument must be str, not None
def get_response(html_url):
"""发送请求函数"""
response = requests.get(html_url)
return response
def get_novel_url(html_url):
"""获取所有章节url地址"""
response = get_response(html_url)
selector = parsel.Selector(response.text)
href = selector.css('#list dd a::attr(href)').getall()
return href
def get_novel_content(html_url):
"""获取小说的内容"""
response = get_response(html_url)
selector = parsel.Selector(response.text)
title = selector.css('.bookname h1::text').get()
content_list = selector.css('#content::text').getall()
content = '\n'.join(content_list)
novel_content = [title, content]
return novel_content
print(title)
def save(name, title, content):
"""保存数据"""
with open(name + '.txt', mode='a', encoding='utf-8') as f:
f.write(title)
f.write('\n')
f.write(content)
f.write('\n')
def main(html_url):
"""主函数"""
response_1 = get_response(html_url)
selector = parsel.Selector(response_1.text)
name = selector.css('#info h1::text').get()
href = get_novel_url(html_url) # 调用了获取小说章节url地址的函数
for index in tqdm(href):
index_url = 'https://www.biqugee6.com' + index
novel_content = get_novel_content(html_url) # 调用了获取小说内容的函数
save(name, novel_content[0], novel_content[1]) # 调用了保存函数
url = 'https://www.biqugee6.com/book/657/'
main(url)
报错是 save
函数的 f.write(title)
,那就说明 title 是 None,你可以 print 以下,看一下 novel_content 的内容。
针对报错信息"TypeError: write() argument must be str, not None",需要首先定位出出错的代码行数,即69行、73行和54行。可能的原因是在这几行代码中传递了空值(None),而参数必须是字符串类型。解决方法有以下几种:
检查代码中相应的变量是否被正确地初始化或赋值。如果变量未被初始化或赋值,就会默认为None,需要将其手动赋值为字符串类型。
检查代码中函数或方法的返回值是否为None,如果是,则需要进行异常处理或返回正确的字符串类型。
检查代码中使用的库或模块是否被正确地调用。如果库或模块未被正确地调用,可能会返回空值或None,需要正确地调用相应的库或模块。
下面给出一个可能的解决方案:
# 在代码中对可能出现None值的变量进行初始化或赋值
my_string = ""
if some_variable is not None:
my_string = str(some_variable)
# 检查函数或方法的返回值是否为None,进行异常处理或返回正确的字符串类型
def my_function():
# some code here
if result is not None:
return str(result)
else:
raise ValueError("Result is None")
# 检查相应的库或模块是否被正确地调用,在调用前进行判断,避免返回空值或None
import my_module
if my_module is not None:
result = my_module.do_something()
if result is not None:
my_string = str(result)
需要根据实际代码进行具体的修改和调整。