You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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内置的(比如ValueErrorKeyError),要么是你已经导入的自定义异常(比如这里的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

火山引擎 最新活动