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