Skip to content

reg_distributed.py: register_one 引用未定义的 token_proxy,注册成功即 NameError #1

@Leslielu

Description

@Leslielu

问题

reg_distributed.pyregister_one() 在注册成功后执行:

# reg_distributed.py:138
token_data["proxy"] = token_proxy

token_proxy 既不是 register_one() 的参数(见函数签名 reg_distributed.py:119),也不是全局变量——它只在 main() 里定义(reg_distributed.py:195)。调用处(reg_distributed.py:239)也没有把它传进去:

token_data = register_one(
    email_provider, reg_proxies, reg_proxy,
    retry=args.retry, retry_delay=args.retry_delay,
)

因此只要 register_account() 成功返回,下一行就会抛 NameError: name 'token_proxy' is not defined。该异常被 register_one 内部的 except 捕获,表现为每次注册在最后一步失败并重试,retry 用尽后报 Registration failed after N attempts,最终 0 registered。前面的 OAuth/邮箱/提交流程全部正常,问题只在这一行。

复现

任意一次能走到 register_account 成功返回的注册(即邮箱后端正常、能拿到验证码)都会触发:

[04] Setting password...
  Registration attempt 1/3 failed: name 'token_proxy' is not defined, retrying...
...
Registration failed after 3 attempts: name 'token_proxy' is not defined
Done: 0 registered, 1 failed

根因

token_proxy 的作用域只在 main(),却在 register_one() 内被引用。

建议修复

register_one() 增加 token_proxy 参数并在调用处传入:

def register_one(email_provider, proxies, proxy, token_proxy="", retry=3, retry_delay=10.0):
    ...
    token_data["proxy"] = token_proxy
    return token_data

# 调用处
token_data = register_one(
    email_provider, reg_proxies, reg_proxy, token_proxy,
    retry=args.retry, retry_delay=args.retry_delay,
)

如需要我可以提 PR。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions