You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook中调用argparse.parse_args()报SystemExit:2错误如何修复

错误原因
  • argparse参数配置逻辑冲突:你给--q、--max-results两个参数同时设置了required=True和default值,required=True的优先级高于默认值,会强制要求必须从命令行传递这两个参数,你设置的默认值不会生效。
  • 运行环境不匹配argparse默认取值逻辑:从报错信息里的ipykernel_launcher.py可以看出你是在Jupyter Notebook/IPython环境下运行代码,argparse默认从系统启动参数中读取配置,而Jupyter内核启动时自带的参数里没有你定义的--q、--max-results,因此会判定参数缺失。
  • 函数内部存在隐藏报错点:你在循环中直接使用了videoId、videoIds两个变量,但没有提前定义也没有从接口返回结果中取值,后续即使参数问题解决也会触发未定义变量报错。
修复方案

1. 适配Jupyter运行环境

把required=True参数删掉,同时改用parser.parse_known_args()替代parser.parse_args(),忽略Jupyter内核自带的多余参数,让你配置的默认值可以正常生效。
如果是在本地Python命令行环境运行代码,不需要修改argparse配置,运行时直接传递参数即可:
python 你的脚本文件名.py --q "Spider-Man Movie Trailer 2021" --max-results 1

2. 修复函数内部变量问题

从搜索结果中正确取出videoId,提前初始化videoIds列表,优化返回逻辑避免无结果时返回未定义变量。

修复后完整代码

import argparse
from googleapiclient.discovery import build

# 请补充你自己的YouTube Data API密钥
key = "你的API密钥"
videoIds = []

def youtube_video_url(options):
    youtube = build('youtube', 'v3', developerKey = key)
   
    search_response = youtube.search().list(q = options.q, part = "id,snippet", maxResults = options.max_results).execute() 
    url = ""
    for search_result in search_response.get("items", []): 
        if search_result["id"]["kind"] == "youtube#video":
            # 从接口返回结果中正确提取videoId
            videoId = search_result["id"]["videoId"]
            print("VideoId: " +str(videoId))
            videoIds.append(videoId)
            url = "https://www.youtube.com/watch?v=" + videoId 
            print(url)
    return url


if __name__ == "__main__":
    print( "Enter the Movie Name : ")
    Movie_name = str(input())
    parser = argparse.ArgumentParser(description = "youtube search") 
    # 移除required=True让默认值生效
    parser.add_argument("--q", help = "Search term", default = Movie_name + " Movie Trailer 2021") 
    parser.add_argument("--max-results", help = "Max results", default = 1) 
   
    # 改用parse_known_args忽略Jupyter自带的多余参数
    args, unknown = parser.parse_known_args()
    
    video_url = youtube_video_url(args) 
    if video_url:
        scrape_comments(video_url, Movie_name)
    else:
        print("未搜索到对应视频,请检查搜索关键词、API配额或接口权限")

内容的提问来源于stack exchange,提问作者nita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:45:02