manajay

Valar Morghulis Valar Dohaeris

静下心来,用心观察 处处都透着生活的美.


python 语法警告

语法的指导规则是 PEP 8

异常捕获太宽泛

too broad exception clause

当你使用 try: exception: 捕获异常时,最好明确指出这是哪种异常;

import logging


try: 
    pass
except Exception as e:
    logging.exception(e) 

如果确实要忽略这个问题, 在try: 前一行 添加 # noinspection PyBroadException

# noinspection PyBroadException
try: 
    pass
exception:
    pass

作用域内外变量名重名

下面书写就会出先警告Shadows name 'root_url' from outer scope


 def crawl(self, root_url):
        # 限制抓取的链接数
        count = 1
        self.urls.add_new_url(root_url)


# 在同一个文件中 调用此函数
root_url = 'www.baidu.com'
crawl(root_url)

解决办法:


 def crawl(self, root_url):
        # 限制抓取的链接数
        count = 1
        self.urls.add_new_url(root_url)


# 在同一个文件中 调用此函数, 不要使用同名变量,改用其他变量 url
url = 'www.baidu.com'
crawl(url)

Method xxx may be ‘static’

方法可能是静态方法; 建议的愿意是,这个方法, 没有使用到self中的属性

class HtmlDownloader(object):

    @staticmethod
    def download(url):
        if url is None:
            return None

        res = urllib2.urlopen(url)
        if res.getcode() != 200:
            return None
        return res.read()

This dictionary creation could be rewritten as a dictionary literal.

字面量字典可能会被覆盖

dic = {}
dic['name'] = 'jack'

解决办法:

dic = dict()
dic['name'] = 'jack'

unexpected spaces around keyword / parameter equals

关键字参数和默认值参数的前后不要加空格

class_ 是关键字,在它附近的等号不要有空格

title_node = soup.find('dd', class_="lemmaWgt-lemmaTitle-title").find('h1')

blank line at end of file

文件最后多了一个空白行

python文本的最后只有一个空白行.

‘ascii’ codec can’t encode characters in position

问题是 字符串编码异常 我们知道字符串有两种表示方式:

  • utf-8 字符串 也就是 str 类型
  • unicode 字符串

而对于编码则有

  • ascii
  • gbk

不同的字符串 对于编码的要求如下:

# 用 ascii 编码含中文的 unicode 字符串  
u.encode('ascii')  # 错误,因为中文无法用 ascii 字符集编码  
                   # UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)  
  
# 用 gbk 编码含中文的 unicode 字符串  
u.encode('gbk')  # 正确,因为 '关关雎鸠' 可以用中文 gbk 字符集表示  
                 # '\xb9\xd8\xb9\xd8\xf6\xc2\xf0\xaf'  
                 # 直接 print 上面的 str 会显示乱码,修改环境变量为 zh_CN.GBK 可以看到结果是对的  
  
# 用 ascii 解码 utf-8 字符串  
s.decode('ascii')  # 错误,中文 utf-8 字符无法用 ascii 解码  
                   # UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)  
  
# 用 gbk 解码 utf-8 字符串  
s.decode('gbk')  # 不出错,但是用 gbk 解码 utf-8 字符流的结果,显然只是乱码  
                 # u'\u934f\u51b2\u53e7\u95c6\u5ea8\u7b2d'  

以上摘自博客也谈 Python 的中文编码处理

所以对于中文编码如果出现上述问题,调整编码策略即可.

最近的文章

python 构建博客

构建的环境 架构 Django 4 python 3 sqlite3 pycharmDjango 的项目结构一般创建的项目,初始化目录为├── Blog│   ├── __init__.py│   ├── __pycache__│   │   ├── __init__.cpython-36.pyc│   │   └── settings.cpython-36.pyc│   ├── settings.py│   ├── urls.py│   └── wsgi.py├── appmod...…

Python继续阅读
更早的文章

命令修正-thefuck

介绍linux 程序员,属于面向命令行的一类,经常要记忆各种终端命令,往往输错的情况下,导致各种问题,并极大影响心情,所以 thefuck出现了. 基于Python安装方式macbrew install thefuckUbuntusudo apt updatesudo apt install python3-dev python3-pipsudo pip3 install thefuck其他环境pip install thefuck##环境变量在.bashrc 或者 .bash_prof...…

thefuck继续阅读