我已经在Python中创建了一个函数(通过GMail API)会找到一封发送到特定电子邮件地址(gmail别名)的电子邮件,其中包含某个主题行,然后从邮件中提取信息。
此函数只有在成功时才会返回,并返回一个字符串。我有3个错误捕获语句,例如。
try:
gmail_service.users().messages().trash(userId='me', id=message['id']).execute()
print 'Message with id: %s trashed successfully.' % message['id']
except errors.HttpError, error:
print 'Could not trash ' + message['id'] + ': %s' % error
我的民意调查代码是:
def check_Mail(self, recipient="", loopfor=0):
print("Loop start! loopfor = " + str(loopfor))
while loopfor > 1:
if get_Mail(recipient) is None:
loopfor -= 5
print(str(loopfor) + " seconds left in loop")
time.sleep(5)
else:
print("Woot, we have mail!")
loopfor = 0
print(get_Mail(recipient))
#return get_Mail(recipient)
我这样称呼check_Mail
:check_Mail("mymail@gmail.com", 30)
,但此方法的结果是输出Loop start! loopfor = 0
,而不是其他任何内容。
为什么我的int
被0
传递?
答案 0 :(得分:2)
在您的电话中,您的问题并不令人惊讶:
我这样调用check_Mail:check_Mail(“mymail@gmail.com”,30)
这里传递两个参数,但是你的函数签名有三个参数:
def check_Mail(self, recipient="", loopfor=0)
所发生的事情是mymail@gmail.com
被分配到self
,30
分配给recipient
:
check_Mail("mymail@gmail.com", 30)
| ----------^
V V
def check_Mail(self, recipient="", loopfor=0)
如果此方法不是类的一部分,请从其定义中删除self
参数。如果它是类的一部分,则需要传递一个类实例,因此obj.check_Mail('mymail@gmail.com', 30)
或checkMail(obj, 'mymail@gmail.com', 30)
答案 1 :(得分:2)
我猜是self
这是一个类方法。类方法需要self
方法,因此在调用类时,类的实例会隐式传递给方法。如果你在一个类之外调用这个方法(例如,用于测试),你的参数将按顺序进行。所以电子邮件地址是self
,整数30是“