我正试图用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()