Python的新特性:类型为';非类型';这是不可容忍的

Python的新特性:类型为';非类型';这是不可容忍的,python,Python,我是Python的新手,Python是第一个被分配到并且现在需要支持的项目:)Python似乎是一种超级友好的语言。所以请原谅我愚蠢的问题 我得到以下错误: File "AlKamelClient.py", line 316, in <module> client.main() File "AlKamelClient.py", line 296, in main self.dispatch_reply_message(self.parse_msg(msg))

我是Python的新手,Python是第一个被分配到并且现在需要支持的项目:)Python似乎是一种超级友好的语言。所以请原谅我愚蠢的问题

我得到以下错误:

  File "AlKamelClient.py", line 316, in <module>
    client.main()
  File "AlKamelClient.py", line 296, in main
    self.dispatch_reply_message(self.parse_msg(msg))
  File "AlKamelClient.py", line 226, in dispatch_reply_message
    self.log_to_db(message)
  File "AlKamelClient.py", line 181, in log_to_db
    if 'session' in data['timing']:
TypeError: argument of type 'NoneType' is not iterable

该错误意味着未设置
数据['timing']
,即设置为null/None

声明:

如果数据中有“会话”[“计时”]:

实际上迭代
数据['timing']
,但由于它是null/None,所以不能迭代它。您应该检查它是否已实际设置。

问题在于
数据
变量明显
message
参数的类型是什么?相反,
data['timing']
None
。没错。谢谢你的更正。另外,我希望
如果
结构为
try/except
。更多pythonic您可以这样测试:
如果数据['timing']中的数据['timing']和'session':
。这仍然假设您在上一行的数据中测试了
“计时”。
def log_to_db(self, message):

    channel = message['channel']
    data = message['data']

    if 'timing' in data:
        if 'session' in data['timing']:
            if 'info' in data['timing']['session']:
                pp.pprint(data['timing']['session']['info'])
                self._timing_session_info.update(data['timing']['session']['info'])
                self._session_id = db.timing_session_info(self._db.cursor(), db.NoneDict(self._timing_session_info))

            if 'entry' in data['timing']['session']:
                pp.pprint(data['timing']['session']['entry'])
                db.timing_session_entry(self._db.cursor(), db.NoneDict(data['timing']['session']['entry']), self._session_id)

            if 'flags' in data['timing']['session']:
                pp.pprint(data['timing']['session']['flags'])
                db.timing_session_flags(self._db.cursor(), db.NoneDict(data['timing']['session']['flags']), self._session_id)

        if 'liveEvents' in data['timing']:
            if 'fl' in data['timing']['liveEvents']:
                pp.pprint(data['timing']['liveEvents']['fl'])
                db.timing_liveEvents_fl(self._db.cursor(), data['timing']['liveEvents']['fl'], self._session_id)
            if 'sector' in data['timing']['liveEvents']:
                pp.pprint(data['timing']['liveEvents']['sector'])
                db.timing_liveEvents_sector(self._db.cursor(), db.NoneDict(data['timing']['liveEvents']['sector']), self._session_id)

    if 'telemEvent' in data:
        pp.pprint(data['telemEvent'])
        db.telemEvent(self._db.cursor(), db.NoneDict(data['telemEvent']), self._session_id)