使用pygsheets时try/except捕获WorksheetNotFound未定义报错咨询
解决pygsheets中WorksheetNotFound未定义错误及try/except捕获逻辑说明
首先说清楚你遇到问题的根源:'WorksheetNotFound' is not defined这个报错,是因为这个异常类是pygsheets库的自定义异常,你没有提前导入它,Python解释器根本不知道这个名称对应的是什么对象,自然无法把它作为捕获目标。
第一步:导入所需的异常类
要捕获pygsheets的WorksheetNotFound异常,需要先从库的异常模块中导入它,在代码开头加上这行:
from pygsheets.exceptions import WorksheetNotFound
针对你的疑问:try/except的捕获逻辑
try/except确实不能捕获所有未定义的错误类型,它的工作规则是:
- 只能捕获Python能识别的异常类型——要么是Python内置的(比如
ValueError、KeyError),要么是你已经导入的自定义异常(比如这里的WorksheetNotFound)。 - 如果你用宽泛的
except Exception:,可以捕获绝大多数非致命异常,但这是不推荐的调试习惯——它会掩盖你没预料到的错误(比如变量名拼写错误、参数传错类型等),让你难以定位真正的问题。 - 正确的用法是只捕获你明确知道会发生、并且有对应处理逻辑的特定异常,这样其他未知错误会正常抛出,帮你快速排查问题。
修改后的完整代码
这里还顺便调整了print语句的缩进(原来它在函数外部,会不管函数是否执行完都打印),现在把它放到函数内部循环结束后:
import pandas as pd import pygsheets from pygsheets.exceptions import WorksheetNotFound def export_col_values(workbook, df, columns): """for a list of columns, creates a new sheet for each column and exports unique values and their counts to that sheet""" for col in columns: value_counts = df[col].value_counts() counts_df = pd.DataFrame(value_counts).reset_index() counts_df['index'] = counts_df['index'].astype(str) try: worksheet = workbook.worksheet_by_title(col) except WorksheetNotFound: workbook.add_worksheet(col) worksheet = workbook.worksheet_by_title(col) worksheet.set_dataframe(counts_df, start='A1') print(f'{len(columns)} sets of column values exported.')
额外小建议
其实pygsheets提供了更简洁的写法,不用自己写try/except逻辑:你可以用workbook.get_worksheet_by_title(col, create=True),这个方法会直接在找不到工作表时创建新表,替换原来的try/except块即可:
# 替换原来的try/except代码块 worksheet = workbook.get_worksheet_by_title(col, create=True)
内容的提问来源于stack exchange,提问作者Christine Jiang




