Python中os.startfile报TypeError:路径应为字符串而非列表求助
Hey there! Let's figure out why you're hitting that TypeError. Your find_files function returns a list of file paths (since it might find multiple copies of "Among Us.exe" on your D: drive), but os.startfile() only accepts a single string, bytes, or PathLike object as its input. That's exactly the mismatch causing your error.
Looking at your code, when you run find = find_files("Among Us.exe","D:"), find ends up being something like ["D:/Games/Among Us.exe"]—a list containing the path, not the path string itself. Passing the whole list to os.startfile() won't work.
Here are two ways to fix this, depending on your needs:
1. If you only expect one matching file (with safety checks)
This is the simplest fix, and we'll add a check to handle cases where the file isn't found at all:
import os def find_files(filename, search_path): result = [] for root, dir, files in os.walk(search_path): if filename in files: result.append(os.path.join(root, filename)) return result find = find_files("Among Us.exe","D:") # First, make sure we actually found the file if find: # Grab the first (and only) matching path os.startfile(find[0]) else: print("Oops! Couldn't find 'Among Us.exe' on your D: drive.")
2. If multiple matches are possible (let the user choose)
If there might be multiple copies of the file, you can let the user pick which one to open:
import os def find_files(filename, search_path): result = [] for root, dir, files in os.walk(search_path): if filename in files: result.append(os.path.join(root, filename)) return result find = find_files("Among Us.exe","D:") if find: print(f"Found {len(find)} copies of 'Among Us.exe':") # List out all found paths with numbers for idx, file_path in enumerate(find, 1): print(f"{idx}. {file_path}") # Get user's choice try: choice = int(input("Enter the number of the file you want to open: ")) if 1 <= choice <= len(find): os.startfile(find[choice - 1]) else: print("That's not a valid number!") except ValueError: print("Please enter a valid number.") else: print("Oops! Couldn't find 'Among Us.exe' on your D: drive.")
The key fix here is accessing a single element from the find list instead of passing the entire list to os.startfile(). Adding checks for empty lists also prevents another error if the file doesn't exist on your D: drive.
内容的提问来源于stack exchange,提问作者Petar Jovanović

