Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—如何在没有特定文件的代码块中检查PEP8错误_Python_Pep8 - Fatal编程技术网

Python—如何在没有特定文件的代码块中检查PEP8错误

Python—如何在没有特定文件的代码块中检查PEP8错误,python,pep8,Python,Pep8,我目前在一个在线学习平台上工作,我试图在学生提交给系统的作业解决方案中添加一些PEP8验证,以便对他们提出的解决方案的好坏给出额外的反馈 我发现使用pythonpep8包,只检查一段代码中的pep8错误(在我的情况下,它将是分配的发布解决方案),而不指定文件系统中特定文件的任何路径并不是那么简单 这真的有可能吗,还是pep8库不允许?当然,我可以将发布的解决方案保存在一个tmp文件中并从那里运行验证,但我希望避免这一额外步骤 有人有相同的问题吗?我终于找到了使用内存文件验证PEP8错误的方法 i

我目前在一个在线学习平台上工作,我试图在学生提交给系统的作业解决方案中添加一些PEP8验证,以便对他们提出的解决方案的好坏给出额外的反馈

我发现使用python
pep8
包,只检查一段代码中的pep8错误(在我的情况下,它将是分配的发布解决方案),而不指定文件系统中特定文件的任何路径并不是那么简单

这真的有可能吗,还是pep8库不允许?当然,我可以将发布的解决方案保存在一个tmp文件中并从那里运行验证,但我希望避免这一额外步骤


有人有相同的问题吗?

我终于找到了使用内存文件验证PEP8错误的方法

import pep8
import StringIO

code_to_be_checked = """
import random
import string


class SimplePasswordGenerator(object):

    list_of_chars = [string.letters, string.digits, string.punctuation]
    union_of_chars = list(set().union(*list_of_chars))

    def __init__(self, available_chars=union_of_chars, length=8):
        self.available_chars = available_chars
        self.length = length

    def __iter__(self):
        return self

    def next(self):  # use __next__ in Python 3.x
        password = ''.join([random.choice(self.available_chars) for i in range(self.length)])
        return password
"""

myfile = StringIO.StringIO(code_to_be_checked)
fchecker = pep8.Checker(lines=myfile.readlines(), show_source=True)
errors = fchecker.check_all()

print("PEP8 error count: {}".format(errors))

注意:如果您使用的是Python3.x,您将需要使用
io.StringIO

看起来没有StringIO也可以完成;只需使用
str.splitlines
,如下所示:

import pep8

code_to_be_checked = """
import random
import string


class SimplePasswordGenerator(object):

    list_of_chars = [string.letters, string.digits, string.punctuation]
    union_of_chars = list(set().union(*list_of_chars))

    def __init__(self, available_chars=union_of_chars, length=8):
        self.available_chars = available_chars
        self.length = length

    def __iter__(self):
        return self

    def next(self):  # use __next__ in Python 3.x
        password = ''.join([random.choice(self.available_chars) for i in range(self.length)])
        return password
"""

fchecker = pep8.Checker(lines=code_to_be_checked.splitlines(True), show_source=True)
errors = fchecker.check_all()

print("PEP8 error count: {}".format(errors))
唯一的技巧是输入行需要以换行结束
str.splitlines(keepends=True)
执行此操作


编辑:进一步检查后,问题看起来更简单-第一行不能是length==0,否则会导致UTF-8检查出错。您的测试代码恰好以空行开头;-)

当你说你“终于”找到了一条路时,你似乎在问问题的同一分钟就回答了自己的问题!?无论如何,你可以在线查询@marksweb回答OP自己的问题没什么错。有关详细信息,您可以查看它什么是
pep8
模块?它似乎不在标准库中。@AhsanulHaque我不认为有问题。只是当我问一个问题时,如果我当时有自己的解决方案,我会把它作为我问题的一部分。坦白地说,使用
StringIO
来做这件事是相当明显的,IMHO。很抱歉与你的话相矛盾,但我认为这不是
的重复,我如何用Python将字符串包装到文件中?
。两种解决方案都使用
StringIO
这一事实并不意味着两个问题是相同的。这里的问题完全与
pep8
模块有关。甚至有一个由@Hugh Bothwell撰写的答案根本不涉及
StringIO
。抱歉@TigerhawkT3,但我认为这不是一个重复的问题(实际上我在写之前已经检查过了)。