首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python代码中的Bug阻止了成功的递归?

python代码中的Bug阻止了成功的递归?
EN

Stack Overflow用户
提问于 2017-07-05 11:14:24
回答 1查看 52关注 0票数 1

我一直在做一个脚本来摄取一个包含电子邮件地址的文件(accounts.txt),每个文件的电子邮件地址都将根据一个应用程序接口进行验证,看看它们是否出现在数据转储中。脚本似乎可以工作,但是存在一个bug,一旦它找到一个肯定的命中,它将忽略任何其他匹配...

例如,如果我的"accounts.txt“文件包含以下条目:

代码语言:javascript
复制
a@a.com
b@b.com

尽管这两个脚本都应该返回结果,但只要运行脚本,就会找到a@a.com上的匹配项,但是b@b.com不会返回任何内容。

我似乎不明白为什么会发生这种情况,理想情况下,我希望所有的点击都能输出。

仅供参考,该脚本正在查询“haveibeenpwned”,这是一个定位在凭据转储中找到的电子邮件地址的站点。

任何帮助找到我的bug的人都将不胜感激。下面是我当前的脚本。

代码语言:javascript
复制
#!/usr/bin/env python

import argparse
import json
import requests
import time

breaches_by_date = {}       
breaches_by_account = {}    
breaches_by_name = {}       

class Breach(object):
    def __init__(self, e, n, d):
        self.email = e
        self.name = n
        self.date = d

    def __repr__(self):
        return "%s: %s breached on %s" % (self.email, self.name, self.date)

def accCheck(acc):
    global breaches_by_date, breaches_by_account, breaches_by_name
    r = requests.get('https://haveibeenpwned.com/api/v2/breachedaccount/%s?truncateResponse=false' % acc)
    try:
        data = json.loads(r.text)
    except ValueError:
        print("No breach information for %s" % acc)
        return
    for i in data:
        name, date = (i['Name'], i['BreachDate'])
        breach = Breach(acc, name, date)
        try: breaches_by_account[acc].append(breach) 
        except: breaches_by_account[acc] = [breach]
        try: breaches_by_name[name].append(breach)
        except: breaches_by_name[name] = [breach]
        try: breaches_by_date[date].append(breach)
        except: breaches_by_date[date] = [breach]

def readFromFile(fname="accounts.txt"):
    accounts=[]
    with open(fname, "r+") as f:
        accounts = [l.strip() for l in f.readlines()] 
    return accounts

if __name__ == '__main__':
    accounts = readFromFile()
    for email_addr in accounts:
        accCheck(email_addr)
    print
    print("Breaches by date")
    for date, breaches in breaches_by_date.items():
        for breach in breaches:
            print(breach) 
        print

    print("Breaches by account")
    for acc, breaches in breaches_by_account.items():
        print(acc)
        for breach in breaches:
            print("%s breached on %s" % (breach.name, breach.date)) 
        print

    print("Breaches by name")
    for name, breaches in breaches_by_name.items():
        print("%s breached for the following accounts:" % name)
        for breach in breaches:
            print("%s on %s" % (breach.email, breach.date))
        print
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 11:35:07

我不能百分之百确定你的问题是从哪里来的,但我会选择这样的代码:

代码语言:javascript
复制
emails_to_check = open("/path/to/yourfile").read().split("\n")
for email in emails_to_check:
 if is_email_blacklisted(email):
  do_something()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44916482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档