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

2019-09-27 16:05:39 +08:00
 z888888cn

出现这个错误,大家是如何解决的? 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 吧

5842 次点击
所在节点    Python
14 条回复
lspvic
2019-09-27 16:21:52 +08:00
在 if 前定义 result=None
kaid97
2019-09-27 16:23:20 +08:00
第一个是因为可能存在在使用前没有对 result 进行赋值,第二个是你声明 result 为 Response 类型,又先初始化为 None,要么第一个加个 else: result = None,让 result 必定会被初始化,要么就第二个不声明不就行。。
bantao
2019-09-27 16:23:32 +08:00
elif 后面再加个 else 就可以了
lspvic
2019-09-27 16:25:59 +08:00
加个 else raise 吧,result=None 了下面还是有可能报错
Vegetable
2019-09-27 16:28:03 +08:00
你别写这种编辑器都能看出来有问题的代码就行了,这 put 请求代码不就报错了吗?
result:typing.Optional[requests.Response]=None 就行了。
Vegetable
2019-09-27 16:30:24 +08:00
@Vegetable 哎我没用 pycharm,可能还不行。因为这样的话 return 的类型又错了,还是
else:
return super().request(*args,**kwargs)这样吧。下边就应该就没问题了
ipwx
2019-09-27 16:36:27 +08:00
首先,我想问的是,你确定这里 method 只有 GET 和 POST 么。。。
z888888cn
2019-09-27 16:40:10 +08:00
@ipwx 这是简单的示例代码。我只是想知道,如何解决 Pycharm 这个警告。
z888888cn
2019-09-27 16:45:40 +08:00
@kaid97 @Vegetable 感谢两位大佬,我成功解决了。

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

第二种解决方法:

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

```python
import typing
result: typing.Optional[requests.Response] = None
```
z888888cn
2019-09-27 16:46:40 +08:00
咦,好奇怪。这个论坛回复,无法重新编辑。回复也无法使用 markdown 语法?
Vegetable
2019-09-27 17:06:26 +08:00
@z888888cn 小破论坛,吃枣药丸 /狗头
z888888cn
2019-09-27 17:19:37 +08:00
@Vegetable 这个论坛挺好的,https://learnku.com/python/t/34547,
注册流程 和 提问要发帖的时候特别有意思,要花费 10-20 分钟时间,回答提问的智慧。
缺点就是人气太差,没 V2EX 好。
sazima
2019-09-27 21:34:29 +08:00
if method == ToolRequest.GET:
result = self.session.get(url)
elif method == ToolRequest.POST:
result = self.session.post(url, data=data)
else:
raise MethodNotAllowed()
locoz
2019-09-28 10:37:49 +08:00
强迫症慎用类型注解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/604852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX