1、shadows name ‘xxxx’ from outer scope 警告解决
在PyCharm中提示shadows name ‘xxxx’ from outer scope,当你在外部有个相同名称的变量在方法内部被重新指定了新的值,也就是说你在外部的相同名称的变量压根就没有任何作用。所以PyCharm就回提示这个信息。这个时候就需要我们去调整具体代码了。
python的变量作用域:
模块对应global,
最内层为local,
外层为nonlocal
变量查找顺序:内层作用域->外层->全局->builtin
只有class、def和lamda会改变作用域
读取变量的时候,如果local没有,查找nonlocal,然后global
写变量的时候,如果没有指明nonlocal/global, 就是在局部作用域定义一个新的变量
def a():
param = 'b' # 这里就会出现这样的提示,因为在main定义的param对象被重新指定了新的值
print param
if __name__ == '__main__':
param = 'a'
a()
1
2
3
4
5
6
可以参考这篇文章说的作用域:http://python.jobbole.com/86465/
————————————————
版权声明:本文为CSDN博主「lucky_白杨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013632755/article/details/78739448
2、pycharm 变量名 (Shadows built-in name 'id' )问题
问题:
原因:
id 是一个内置的函数。
你取的变量名 ,最好不要用内置的函数名,ide友好提示,就是指的这个
3、
PYCHARM提示INSTANCE ATTRIBUTE USERS_INDEX DEFINED OUTSIDE __INIT__
问题描述:
Pycharm提示Instance attribute users_index defined outside __init__
示例代码:
-
class UserBehavior(TaskSet):
-
def on_start(self):
-
self.users_index = 0 #会出现下划线提示Instance attribute users_index defined outside __init__
-
self.groups_index = 0 #会出现下划线提示Instance attribute groups_index defined outside __init__
原因分析:
实例属性attribute_name定义在__init之外__
这个提示背后的想法是:为了可读性。我们希望通过读取它的 __ init __ 方法来查找实例可能具有的所有属性。构造方法里做赋值以外的事情,会降低代码的可测试性。
分割初始化为其他方法。在这种情况下,您可以在 __ init __ 中简单地将属性分配给无子初始化方法。
解决方案1:
在 inint 中定义一个名字,赋值为None
修改代码如下:
-
class UserBehavior(TaskSet):
-
def __init__(self):
-
self.users_index = None
-
self.groups_index = None
-
def on_start(self):
-
self.users_index = 0
-
self.groups_index = 0
解决方案2:
在settings -> editor -> inspections -> python 取消勾选提示
原理分析,参见https://www.cnblogs.com/weibgg/p/10786956.html
4、
警告:Default Argument Value is mutable
产生原因
参数赋值为可变对象(mutable object),比如list; 函数参数的初值只会被计算一次。
参考案例
解决方法
5、
【问题记录】Pycharm提示:No data sources are configured to run this SQL and provide advanced code assistance.
问题描述
No data sources are configured to run this SQL and provide advanced code assistance.
解决方案
- 确认Pycharm侧边栏打开,没有打开的话配置路径为:
File>>Settings>>Appearance>>Show tool window bars - 侧边栏找到Database
- 添加数据库配置
示例:配置本地Oracle数据库
6、
This dictionary creation could be rewritten as a dictionary literal
在使用Pycharm创建字典的时候,经常会看到如下提示:
This dictionary creation could be rewritten as a dictionary literal
截图:
但是单独定义一个字典又没有这个提示:
由此可见,这个和定义字典后,赋值键值对有关,即后面的第2行之后有关
解释如下:
链接1:https://stackoverflow.com/questions/8406242/why-does-pycharms-inspector-complain-about-d
链接2:https://youtrack.jetbrains.com/issue/PY-19269#u=1461253420326
解决方法:
1、不需要分行写
2、使用dict()
3、结合上面两个,使用update
方法1:
storage = dict() # 使用dict()
storage.update({
"first": {},
"middle": {},
"last": {}
})
names = {} # 使用{}
names.update({
"first": {},
"middle": {},
"last": {}
})
print("Storage:{}".format(storage))
print("Names:{}".format(names))
输出:
7、其他