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

Python 3.10出现UnboundLocalError:driver赋值前被引用求解决

解决pytest+Selenium中的UnboundLocalError问题

你的错误根源在于setup fixture的逻辑漏洞:只有当传入的browser参数是"chrome"或"firefox"时,driver变量才会被赋值。如果用户传入了不支持的浏览器值(比如拼写错误、或者没传参数导致browser为None),driver变量根本没被定义,执行到return driver时就会触发UnboundLocalError。

下面是几种修复方案:

方案1:添加默认浏览器兜底

先初始化driver变量,再根据浏览器类型赋值,最后加默认分支避免未定义情况:

import pytest
from selenium import webdriver

@pytest.fixture()
def setup(browser):
    driver = None
    if browser == "chrome":
        driver = webdriver.Chrome()
        print("Launching chrome browser.........")
    elif browser == "firefox":
        driver = webdriver.Firefox()
        print("Launching firefox browser.........")
    else:
        # 不支持的浏览器默认启动Chrome
        driver = webdriver.Chrome()
        print(f"Unsupported browser: {browser}, launching default chrome browser.........")
    return driver

def pytest_addoption(parser):
    parser.addoption("--browser", default="chrome", help="Specify browser: chrome or firefox")

@pytest.fixture()
def browser(request):  
    return request.config.getoption("--browser")

方案2:抛出明确的异常提示

如果不想用默认浏览器,直接抛出异常告知用户不支持的浏览器类型:

@pytest.fixture()
def setup(browser):
    if browser == "chrome":
        driver = webdriver.Chrome()
        print("Launching chrome browser.........")
    elif browser == "firefox":
        driver = webdriver.Firefox()
        print("Launching firefox browser.........")
    else:
        raise ValueError(f"Unsupported browser: {browser}. Only 'chrome' and 'firefox' are allowed")
    return driver

额外建议:给--browser参数设置默认值(如方案1所示),这样用户不指定浏览器时也能正常运行测试,避免browser为None的情况。

内容的提问来源于stack exchange,提问作者Mr.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:01:10