python PEP8问题及解决

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__

标签: Python报错  Pycharm  python

问题描述:

Pycharm提示Instance attribute users_index defined outside __init__

示例代码:

 
  1. class UserBehavior(TaskSet):

  2. def on_start(self):

  3. self.users_index = 0 #会出现下划线提示Instance attribute users_index defined outside __init__

  4. self.groups_index = 0 #会出现下划线提示Instance attribute groups_index defined outside __init__

原因分析:

实例属性attribute_name定义在__init之外__

这个提示背后的想法是:为了可读性。我们希望通过读取它的 __ init __ 方法来查找实例可能具有的所有属性。构造方法里做赋值以外的事情,会降低代码的可测试性。

分割初始化为其他方法。在这种情况下,您可以在 __ init __ 中简单地将属性分配给无子初始化方法。

解决方案1:

在 inint 中定义一个名字,赋值为None

修改代码如下:

 
  1. class UserBehavior(TaskSet):

  2. def __init__(self):

  3. self.users_index = None

  4. self.groups_index = None

  5. def on_start(self):

  6. self.users_index = 0

  7. 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.
在这里插入图片描述

解决方案

  1. 确认Pycharm侧边栏打开,没有打开的话配置路径为:
    File>>Settings>>Appearance>>Show tool window bars
    在这里插入图片描述
  2. 侧边栏找到Database
    在这里插入图片描述
  3. 添加数据库配置
    示例:配置本地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、其他

Python PEP8 代码规范常见问题及解决方法_TRHX'S BLOG-CSDN博客 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PEP 8是Python编程规范的一部分,其中包括了命名规范、注释规则和编程推荐等内容。错误信息PEP 8: E305 expected 2 blank lines after class or function definition, found 1意味着在函数定义后只有一个空行,但是规范要求在函数定义后添加两个空行。 解决这个问题的方法很简单,只需要在函数定义后面添加两个空行即可。这样就符合了PEP 8的要求,也能解决错误信息中提到的问题。 如果你遵循了PEP 8编码规范,不仅能提高代码的可读性,也能让你的代码更加规范和易于维护。你可以下载PEP 8编程规范的文档,详细了解其中的内容和建议。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E305 expected 2 blank lines after class or ...](https://blog.csdn.net/han1202012/article/details/120644818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python编程规范PEP8.pdf](https://download.csdn.net/download/wanderkid/12254753)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [PEP 8: E305 excepted 2 blank lines, after class or function definition, found 1](https://blog.csdn.net/feizuiku0116/article/details/126372276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值