应为str、字节或os.PathLike对象,而不是NoneType(tkinter错误)



我正试图用tkinter按钮读取文件,基本上当按下按钮时,该函数将读取文件。如果文件不存在,它将显示一个错误,如果它退出,它将继续,但它会向我抛出一个错误

expected str, bytes or os.PathLike object, not NoneType

以下是代码:

def ffr(driver,filename):
f = open(filename, "r")
lines = f.readlines()
f= []
for i in lines:
f.append(i[:-1])
wait = webdriver(driver, 10)
for i in f:
url = "https://www.instagram.com/"+i+"/"
driver.get(url)
time.sleep(1)
def follow_file():
try:
open('reading.txt')
except FileNotFoundError:
Error_box_follow_file_not_found()

按钮:

ff= Button(root,text="read file", command=lambda:ffr(driver,follow_file()))
ff.grid(column=1,row=19)

错误框

def Error_box_follow_file_not_found():
messagebox.showerror('insa', "Error: Please add file 'readline.txt' into path!")
messagebox.CANCEL

主要问题:follow_file()必须有return文件名,才能获得ffr(driver,filename)

def follow_file():
try:
open('reading.txt')
return 'reading.txt'  # <---
except FileNotFoundError:
Error_box_follow_file_not_found()

但这仍然存在其他问题。

如果文件不存在,则它运行Error_box_follow_file_not_found(),但稍后它将使用return None退出此函数,并运行ffr(driver, None),这将引发错误。它必须在开始时检查filename is not None并跳过代码的其余部分。

def ffr(driver, filename):
if filename:  # if filename is not None:
f = open(filename)
lines = f.read().split("n")
f.close()
wait = webdriver(driver, 10)
for i in lines:
url = "https://www.instagram.com/"+i+"/"
driver.get(url)
time.sleep(1)

坦率地说,我会在一个功能中完成所有

def ffr(driver):
try:
f = open('reading.txt')
lines = f.read().split("n")
f.close()
except FileNotFoundError:
Error_box_follow_file_not_found()
return
wait = webdriver(driver, 10)
for i in lines:
url = "https://www.instagram.com/"+i+"/"
driver.get(url)
time.sleep(1)

编辑:

最小工作代码

import tkinter as tk
from tkinter import messagebox
from selenium import webdriver
# --- functions ---  # PEP8: `lower_case_names`
def error_box_follow_file_not_found():
messagebox.showerror('insa', "Error: Please add file 'readline.txt' into path!")
def ffr(driver):
try:
f = open('reading.txt')
lines = f.read().split("n")
f.close()
except FileNotFoundError:
error_box_follow_file_not_found()
return
wait = webdriver(driver, 10)
for i in lines:
url = f"https://www.instagram.com/{i}/"
driver.get(url)
time.sleep(1)
# --- main ---
driver = webdriver.Firefox()
root = tk.Tk()
ff = tk.Button(root, text="Read file", command=lambda:ffr(driver))
ff.grid(column=1, row=19)
root.mainloop()

相关内容

最新更新