Object attribute not recognized by object's functions [Python] -


i'm running strange error.

import socket string_message_converter import stringmessageconverter smc sbe_message_converter import sbemessageconverter abstract_publisher import abstractfoo import config class foo(abstractfoo):      def __init__(self, p_id):         self.sock = 1         self.p_id = p_id      def connect(self):         ttl = 2         self.sock = socket.socket(socket.af_inet, socket.sock_dgram)         self.sock.setsockopt(socket.ipproto_ip, socket.ip_multicast_ttl, ttl) 

i have main method relies on class. when run connect(), nameerror 'global name 'sock' not defined'. sock not global; attribute define in __init__. weird thing same error not occur p_id. example:

multicastpublisher.py:

class foo(abstractfoo):          def __init__(self, p_id):             self.sock = 1             self.p_id = p_id          def connect(self):             ttl = 2             self.p_id = 2             print self.p_id             self.sock = socket.socket(socket.af_inet, socket.sock_dgram)             self.sock.setsockopt(socket.ipproto_ip, socket.ip_multicast_ttl, ttl) 

will print '2' p_id (will still break on self.sock in connect before too). moreover, ran same code on different machine , runs fine. why isn't self.sock being recognized?

edit: main method 2 lines.

testmain_pub.py

def main():      f = foo()     f.start_process() #references connect method 

the stack trace referencing connect method:

  file "testmain_pub.py", line 21, in <module>     main()   file "testmain_pub.py", line 9, in main     m.publish_start("start message")   file "/home/observe_and_report/multicast_publisher.py", line 48, in publish_start     self.publish("start", message)   file "/home/observe_and_report/multicast_publisher.py", line 35, in publish     self.connect()   file "/home/observe_and_report/multicast_publisher.py", line 30, in connect     self.sock = socket.socket(sock.af_inet, socket.sock_dgram) 

this might not answer looking for, error elsewhere, not in code show us. take gave , strip down bare minimum , works.

import socket  class abstractfoo:     pass  class foo(abstractfoo):     def __init__(self, p_id):         self.sock = 1         self.p_id = p_id      def connect(self):         ttl = 2         self.sock = socket.socket(socket.af_inet, socket.sock_dgram)         print 'self.sock =', self.sock         self.sock.setsockopt(socket.ipproto_ip, socket.ip_multicast_ttl, ttl)  def main():     f = foo(123)     f.connect()  if __name__ == '__main__':     main() 

output:

self.sock = <socket._socketobject object @ 0x10f4b91a0> 

update

you should take hint @pablodíazogni: problem here: sock.af_inet, in code not showing us.


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -