首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
宝塔
V2EX  ›  Python

出现这个错误,大家是如何解决的? Local variable 'xxxx' might be referenced before assignment ,我有强迫症。

  •  
  •   z888888cn · 49 天前 · 1137 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

    出现这个错误,大家是如何解决的? Local variable 'result' might be referenced before assignment,我有强迫症。

    这是一段简单的代码。

    if method == ToolRequest.GET:
        result = self.session.get(url)
    elif method == ToolRequest.POST:
        result = self.session.post(url, data=data)
    print(f"请求 URL {url}\n 返回状态 {result.status_code}\ncookie {result.cookies}\n 返回内容 {result.content}")
    print()
    return result
    

    附上图吧,大家都知道这是 Pycharm 吧

    1

    2

    14 回复  |  直到 2019-09-28 10:37:49 +08:00
        1
    lspvic   49 天前 via Android
    在 if 前定义 result=None
        2
    kaid97   49 天前
    第一个是因为可能存在在使用前没有对 result 进行赋值,第二个是你声明 result 为 Response 类型,又先初始化为 None,要么第一个加个 else: result = None,让 result 必定会被初始化,要么就第二个不声明不就行。。
        3
    bantao   49 天前 via Android
    elif 后面再加个 else 就可以了
        4
    lspvic   49 天前 via Android
    加个 else raise 吧,result=None 了下面还是有可能报错
        5
    Vegetable   49 天前
    你别写这种编辑器都能看出来有问题的代码就行了,这 put 请求代码不就报错了吗?
    result:typing.Optional[requests.Response]=None 就行了。
        6
    Vegetable   49 天前
    @Vegetable 哎我没用 pycharm,可能还不行。因为这样的话 return 的类型又错了,还是
    else:
    return super().request(*args,**kwargs)这样吧。下边就应该就没问题了
        7
    ipwx   49 天前
    首先,我想问的是,你确定这里 method 只有 GET 和 POST 么。。。
        8
    z888888cn   49 天前
    @ipwx 这是简单的示例代码。我只是想知道,如何解决 Pycharm 这个警告。
        9
    z888888cn   49 天前
    @kaid97 @Vegetable 感谢两位大佬,我成功解决了。

    第一种解决方法:在 `elif` 后面在 在一个 `else: result = None`,让 `result` 必定会被初始化。

    第二种解决方法:

    直接先对`result`初始化`None`

    ```python
    import typing
    result: typing.Optional[requests.Response] = None
    ```
        10
    z888888cn   49 天前
    咦,好奇怪。这个论坛回复,无法重新编辑。回复也无法使用 markdown 语法?
        11
    Vegetable   49 天前
    @z888888cn 小破论坛,吃枣药丸 /狗头
        12
    z888888cn   49 天前
    @Vegetable 这个论坛挺好的,https://learnku.com/python/t/34547,
    注册流程 和 提问要发帖的时候特别有意思,要花费 10-20 分钟时间,回答提问的智慧。
    缺点就是人气太差,没 V2EX 好。
        13
    sazima   48 天前
    if method == ToolRequest.GET:
    result = self.session.get(url)
    elif method == ToolRequest.POST:
    result = self.session.post(url, data=data)
    else:
    raise MethodNotAllowed()
        14
    locoz   48 天前
    强迫症慎用类型注解
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2723 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 10:46 · PVG 18:46 · LAX 02:46 · JFK 05:46
    ♥ Do have faith in what you're doing.