저는 파이썬 irc 봇을 만들고 있습니다. 어떤 이유로 join() 메서드의 yield 문은 메서드를 모두 건너 뜁니다. 그러나 반환 값으로 바꾸면 제대로 작동합니다. 그러나 각 실패한 조인 시도마다 오류를 생성해야합니다.수확량이 작동하지 않지만 반환합니까
어떤 이유로 든 참여가 실패한 경우 서버 오류 명령 코드 응답을 반환하는 봇의 조인 방법이 있습니다. 봇이 성공적으로 조인하면 None입니다.
unsuccessful = bot.join(channels)
내가 할 수있을 것입니다 : 나는 그것이 실행 "응답을 반환"과 "수율 응답을"전환하면
if unsuccessful:
for error in unsuccessful:
print(error)
조인 방법이
def join(self, channels):
chan_errors = range(471, 480) # See RFC for commands 471-479
if isinstance(channels, str):
channels = [channels,]
for channel in channels:
self.send('JOIN %s' % channel)
for response in self.get_response('JOIN', chan_errors): # Verify
if response.command in chan_errors:
channels.remove(channel)
yield response
self.channels.append(channels)
처럼 보인다 방법. 그것은 메시지 생성 메시지를 수신한다
def get_response(self, commands, terminators=None):
for msg in self.msg_gen():
self.handle(msg)
if msg.command in commands:
if terminators is None:
return msg
yield msg
if msg.command in terminators:
return msg
같이
get_response 방법 보인다. 명령은 호출자가 찾고있는 서버 명령이며 터 LN 터는 터 L 널이 발견되면 생성자에서 빠져 나옵니다. 그것은 코 루틴과 같습니다.
여기에 무슨 일이 일어나는지 아는 사람이 있습니까?
'yield'가 무엇이고 발전기를 사용하는 방법을 알고 있습니까? 'bot.join (channels)'은 생성자를 반환합니다; 그 값을 얻기 위해 반복해야합니다. – BrenBarn
@BrenBarn 나는 발전기로서 '실패'를 사용할 것이라는 것을 설명하기 위해 질문을 편집 할 것이다. – user2878309
어떤 방식으로 그것이 "작동하지 않습니까? 그것은 무엇을합니까? 루프에 아무 것도 인쇄하지 않는다는 말입니까? – BrenBarn