【发布时间】:2020-10-21 12:51:42
【问题描述】:
问题是要打印一个公司的几台机器上的用户登录或注销的用户报告和他们当前的状态。
class Event: def __init__(self, event_date, event_type, machine_name, user): self.date = event_date self.type = event_type self.machine = machine_name self.user = user def get_event_date(event): return event.date def current_users(events): events.sort(key=get_event_date) machines = {} for event in events: if event.machine not in machines: machines[event.machine] = set() if event.type == "login": machines[event.machine].add(event.user) elif event.type == "logout": machines[event.machine].remove(event.user) return machines def generate_report(machines): for machine, users in machines.items(): if len(users) > 0: user_list = ", ".join(users) print("{}: {}".format(machine, user_list)) events = [ Event('2020-01-21 12:45:56', 'login', 'myworkstation.local', 'jordan'), Event('2020-01-22 15:53:42', 'logout', 'webserver.local', 'jordan'), Event('2020-01-21 18:53:21', 'login', 'webserver.local', 'lane'), Event('2020-01-22 10:25:34', 'logout', 'myworkstation.local', 'jordan'), Event('2020-01-21 08:20:01', 'login', 'webserver.local', 'jordan'), Event('2020-01-23 11:24:35', 'logout', 'mailserver.local', 'chris'), ] users = current_users(events) print(users)
我已经成功编译并在我的 pycharm 上获得了输出:
{'webserver.local': {'jordan'}}
Process finished with exit code 0
但我在 jupyter notebook 上遇到错误。
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-11-46e68509ab0d> in <module>
----> 1 users = current_users(events)
2 print(users)
<ipython-input-8-5fb178c90d75> in current_users(events)
11 machines[event.machine].add(event.user)
12 elif event.type == "logout":
---> 13 machines[event.machine].remove(event.user)
14 return machines
15
KeyError: 'chris'
我知道这是因为我们的事件列表中有一个用户从他没有登录的机器上注销。
但我的问题是,这样的 'chris' keyerror 是什么意思,或者为什么我的 pycharm 编译显示了 jupyter notebook 没有的结果?
【问题讨论】:
-
我在 pycharm 中遇到同样的错误。你确定
events列表在 pycharm 和 jupyter notebook 中是一样的吗?
标签: python-3.x oop