我正在嘗試使用 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
uj5u.com熱心網友回復:
主要問題: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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383495.html
