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

Python子域名查找脚本错误处理函数行为不一致求助

排查子域名查找工具错误处理函数异常的思路

1. 参数不足场景:未触发错误提示

  • 问题根源:脚本开头未主动校验sys.argv长度,或校验逻辑未关联throw_error。直接取sys.argv[1]/sys.argv[2]会触发IndexError,但如果没捕获该异常并传给throw_error,就不会输出自定义提示。
  • 解决:在脚本最开头添加参数校验逻辑,主动调用throw_error:
    import sys
    def throw_error(msg):
        print(f"[ERROR] {msg}", file=sys.stderr)
    
    if len(sys.argv) != 3:
        throw_error("使用错误:请输入正确格式\n示例:python subdomain.py 子域名列表.txt https://example.com")
        sys.exit(1)
    

2. 子域名列表文件不存在场景:无错误输出

  • 问题根源:打开文件时未捕获FileNotFoundError,或捕获后未调用throw_error。若直接执行open()操作,文件不存在会触发系统异常,但如果你的异常捕获仅覆盖连接错误,就不会触发自定义提示。
  • 解决:在文件读取代码块外添加异常捕获:
    try:
        with open(sys.argv[1], 'r') as f:
            subdomains = f.read().splitlines()
    except FileNotFoundError:
        throw_error(f"错误:子域名列表文件 {sys.argv[1]} 不存在")
        sys.exit(1)
    

3. URL缺少http(s)前缀场景:无格式提示

  • 问题根源:未主动校验URL格式,或未捕获requests库抛出的InvalidURL异常。直接发起请求会触发异常,但如果捕获逻辑未包含该类型,throw_error就不会被调用。
  • 解决:二选一即可:
    • 主动校验URL前缀:
      target_url = sys.argv[2]
      if not target_url.startswith(('http://', 'https://')):
          throw_error("错误:URL必须包含http://或https://前缀")
          sys.exit(1)
      
    • 捕获InvalidURL异常:
      import requests
      try:
          response = requests.get(f"{target_url}/{subdomain}", timeout=3)
      except requests.exceptions.InvalidURL:
          throw_error(f"错误:URL格式不正确,请检查前缀")
      except requests.exceptions.ConnectionError:
          throw_error(f"子域名 {subdomain} 不存在或无法连接")
      

4. 连接错误正常工作的原因

你已经在子域名请求的代码块中捕获了ConnectionError并调用throw_error,所以该场景能正常触发。而前三个场景要么缺少主动校验,要么未覆盖对应异常类型,导致throw_error未被执行。

额外检查点

  • 确认throw_error函数实现无问题,比如是否正确接收参数并输出到标准错误流:
    def throw_error(msg):
        print(f"[ERROR] {msg}", file=sys.stderr)
    
  • 检查所有可能抛出异常的代码块,确保都被try-except包裹,并在except块中正确调用throw_error,不要遗漏异常类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:45:06