Python's context managers are a very neat way of handling code that needs a teardown once you are done. Python objects have do have a destructor method ( __del__ ) called right before the last instance of the object is about to be destroyed. You can do a teardown there. However there is a lot of fine print to the __del__ method. A cleaner way of doing tear-downs is through Python's context manager , manifested as the with keyword. class CrushMe: def __init__(self): self.f = open('test.txt', 'w') def foo(self, a, b): self.f.write(str(a - b)) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.f.close() return True with CrushMe() as c: c.foo(2, 3) One thing that is important, and that got me just now, is error handling. I made the mistake of ignoring all those 'junk' arguments ( exc_type, exc_val, exc_tb ). I just skimmed the docs and what popped out is that you need to return True or...
I've moved to kaushikghose.wordpress.com
hi,
ReplyDeletei try to do do this, but *#$@*
how to install the software PyAppleSMS?
i`ve this problem
Traceback (most recent call last):
File "example.py", line 3, in
import applesms
ImportError: dlopen(/Library/Python/2.7/site-packages/applesms.so, 2): Symbol not found: _IOConnectMethodStructureIStructureO
Referenced from: /Library/Python/2.7/site-packages/applesms.so
Expected in: flat namespace
in /Library/Python/2.7/site-packages/applesms.so
Which platform are you on? Try
ReplyDeletehttp://code.activestate.com/pypm/pyapplesms/
to see if they have a version for your OS.
In general, you should state the OS, the python version and the library version as a minimum to help people with your question.
Best
Note, with newer versions of OS X, you'll need to edit the file applesms.c, as follows:
ReplyDelete// result = IOConnectMethodStructureIStructureO(dataPort, kernFunc, structureInputSize,
// &structureOutputSize, &inputStructure, outputStructure);
result = IOConnectCallStructMethod(dataPort, kernFunc,
&inputStructure, structureInputSize,
outputStructure, &structureOutputSize);