Python中NoneType错误解决及CSV遇NoneType设默认值方法
Hey there! Let's tackle your two questions one by one—first understanding how to fix those pesky NoneType errors in Python, then building the CSV processing script you need.
First, let's get clear: a NoneType error pops up when you try to run an operation (like accessing an attribute, calling a method, or doing math) on a variable that's set to None—meaning it has no valid value assigned. Here's how to troubleshoot and fix this:
Check for
Nonebefore using variables/function returns
Always add a quick validation step to handle missing values. For example:company_name = get_company_name() if company_name is not None: # Proceed with your domain extraction logic domain = extract_domain(company_name) else: # Fallback to a default value or log a warning domain = "no_domain_available"Pinpoint why something returns
None
Functions often returnNoneif they don't hit a validreturnstatement, or if an operation fails silently. Double-check your function logic—for example, if your domain-extraction function can't parse a company name, make sure it either raises a clear error or explicitly returns a value you can handle.Avoid chained calls without checks
Chained operations likecompany.website.domainare risky if any part could beNone. Use conditional checks or the walrus operator (Python 3.8+) to validate each step safely:if (website := company.get("website")) is not None and (domain := website.get("domain")) is not None: print(domain) else: domain = "default_domain.com"
Let's put this into practice with your CSV task. We'll use Python's built-in csv module to read the file, process each company name to fetch its domain, handle NoneType by setting a default, and write the updated data back to new.csv.
Assuming you have a function get_company_domain(company_name) that tries to fetch the domain (and returns None if it fails), here's a complete, ready-to-use script:
import csv def get_company_domain(company_name): # Replace this with your actual domain-extraction logic # Example: map known company names to their domains domain_lookup = { "Google Inc.": "google.com", "Microsoft Corp.": "microsoft.com", "Amazon.com Inc.": "amazon.com" } # Return None if no match is found return domain_lookup.get(company_name.strip()) # Process the CSV file updated_rows = [] # Step 1: Read existing data from new.csv with open("new.csv", mode="r", newline="", encoding="utf-8") as input_file: reader = csv.DictReader(input_file) # Make sure the CSV has a "company_name" column (adjust if your column name differs) if "company_name" not in reader.fieldnames: raise ValueError("CSV file must contain a 'company_name' column") for row in reader: company_name = row["company_name"] # Get domain, use default if result is None domain = get_company_domain(company_name) or "no_domain_found" # Add/update the domain column in the row row["domain"] = domain updated_rows.append(row) # Step 2: Write the updated data back to new.csv with open("new.csv", mode="w", newline="", encoding="utf-8") as output_file: # Include the "domain" column in the output fieldnames = reader.fieldnames + ["domain"] if "domain" not in reader.fieldnames else reader.fieldnames writer = csv.DictWriter(output_file, fieldnames=fieldnames) writer.writeheader() writer.writerows(updated_rows)
Quick Notes:
- The line
domain = get_company_domain(company_name) or "no_domain_found"handles NoneType cleanly—if the function returnsNone, it automatically uses the default string. - We read all rows into a temporary list first to avoid modifying the file while reading it (safer for small to medium-sized CSVs).
- Swap out the
get_company_domainfunction with your actual logic (like web scraping, database lookup, or regex parsing) to fit your needs.
内容的提问来源于stack exchange,提问作者vipul-rao




