简体   繁体   English

运行日历 api python3 时出现“NoneType”错误

[英]'NoneType' error while running calendar api python3

I'm working on python script which captures all my events in google calendar.我正在研究 python 脚本,该脚本捕获了我在谷歌日历中的所有事件。 this code will show the list of all the events in a day.此代码将显示一天中所有事件的列表。

Below is the code.下面是代码。

from __future__ import print_function
import httplib2
import os
import datetime

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

import datetime

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/calendar-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/calendar.readonly'
CLIENT_SECRET_FILE = 'credentials.json'
APPLICATION_NAME = 'Google Calendar API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.
    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.
    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'calendar-python-quickstart.json')

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def main():
    """Shows basic usage of the Google Calendar API.
    Creates a Google Calendar API service object and outputs a list of the next
    10 events on the user's calendar.
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('calendar', 'v3', http=http)

    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
    print('Getting the upcoming 10 events')
    eventsResult = service.events().list(
        calendarId='primary', timeMin=now, maxResults=10, singleEvents=True,
        orderBy='startTime').execute()
    events = eventsResult.get('items', [])

    if not events:
        print('No upcoming events found.')
    for event in events:
        start = event['start'].get('dateTime')
#        print(start)
        start = start[:-9]

#        print(start)
        start = datetime.datetime.strptime(start,"%Y-%m-%dT%H:%M")

        pretty_time = start.strftime("%I:%M")
        pretty_date = start.strftime("%B %d, %Y")
                
        print(event['summary'],"at",pretty_time,"on",pretty_date)


if __name__ == '__main__':
    main()
    

below is the error which I'm getting.下面是我得到的错误。 Not able to find the what is the mistake I made.无法找到我犯的错误。 please help.请帮忙。

below is the error which I'm getting.下面是我得到的错误。 Not able to find the what is the mistake I made.无法找到我犯的错误。 please help.请帮忙。

Traceback (most recent call last):
  File "/Users/mbhamidipati/python-practice/change/getevents.py", line 86, in <module>
    main()
  File "/Users/mbhamidipati/python-practice/change/getevents.py", line 75, in main
    start = start[:-9]
TypeError: 'NoneType' object is not subscriptable

Thanks, Sreman谢谢, 斯雷曼

It seems that the main thing you need to decide is how you're going to handle when看来你需要决定的主要事情是你将如何处理

event['start'].get('dateTime') returns None event['start'].get('dateTime')返回None

you can add a default value to .get('dateTime')您可以为.get('dateTime')添加默认值

Something like this, assuming that you can get a value from another key, such as 'date'像这样,假设您可以从另一个键中获取值,例如'date'

start = event['start'].get('dateTime', event['start'].get('date'))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM