Re: Checking for dlls in ctypes

2012-10-13 Thread Nobody
On Fri, 12 Oct 2012 12:28:17 -0400, Dave Angel wrote:

 Using bare excepts is almost never a good idea.  If it works you get no
 clues what went wrong.  For example, a typo in source code can trigger a
 bare exception, as can a user typing Ctrl-C.   So when you're using bare
 excepts, you have robbed the user of any way to terminate the program.

If you want to catch any error, use except StandardError:. That covers
all errors but not things like KeyboardInterrupt (Ctrl-C) or SystemExit
(sys.exit()).

In situations such as this, where you try multiple candidates until one
succeeds, there's no reason to be any more specific than that. In any
case, Python's lack of formal interfaces makes it hard to reliably be more
specific.

However: you should bear in mind that loading the wrong DLL may just
result in an OS-level exception (e.g. segfault), which can't be caught.
It's preferable to allow the DLL to be explicitly selected e.g. in a
configuration file.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Checking for dlls in ctypes

2012-10-13 Thread 88888 Dihedral
Wanderer於 2012年10月12日星期五UTC+8下午11時36分27秒寫道:
 I'm trying to write some code that will load one of three dll depending on 
 the one available. I've tried the code below, but it doesn't work. The try 
 except doesn't catch the exception. Is there a way to do this?
 
 
 
 try:
 
 self.dll = windll.pvcam64
 
 except:
 
 print No pvcam64
 
 try:
 
 self.dll = windll.pvcam32
 
 except:
 
 print No pvcam32
 
 try:
 
 self.dll = windll.pvcam
 
 except:
 
 print No pvcam
 
 return
 
 else:
 
 print installed pvcam
 
 else:
 
 print installed pvcam32
 
 else:
 
 print installed pvcam64

In linux  there are shared libraries that could be linked in the runtime.

But for the security concerns this requres the system administrator account 
to install shared libraries.
-- 
http://mail.python.org/mailman/listinfo/python-list


Checking for dlls in ctypes

2012-10-12 Thread Wanderer
I'm trying to write some code that will load one of three dll depending on the 
one available. I've tried the code below, but it doesn't work. The try except 
doesn't catch the exception. Is there a way to do this?

try:
self.dll = windll.pvcam64
except:
print No pvcam64
try:
self.dll = windll.pvcam32
except:
print No pvcam32
try:
self.dll = windll.pvcam
except:
print No pvcam
return
else:
print installed pvcam
else:
print installed pvcam32
else:
print installed pvcam64

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Checking for dlls in ctypes

2012-10-12 Thread Dave Angel
On 10/12/2012 11:36 AM, Wanderer wrote:
 I'm trying to write some code that will load one of three dll depending on 
 the one available. I've tried the code below, but it doesn't work. The try 
 except doesn't catch the exception. Is there a way to do this?

 try:
 self.dll = windll.pvcam64
 except:
 print No pvcam64
 try:
 self.dll = windll.pvcam32
 except:
 print No pvcam32
 try:
 self.dll = windll.pvcam
 except:
 print No pvcam
 return
 else:
 print installed pvcam
 else:
 print installed pvcam32
 else:
 print installed pvcam64


I can't help you find the dll's, because I don't run Windows.  But I
could help you write a clearer question:

doesn't work is thoroughly useless for describing errors.  If you're
getting an exception, show us the full traceback.  That will show which
statement got the exception that wasn't caught.  Next question is which
of the dlls is missing.  Are you getting an exception because it's
missing or because of something more fundamental, like nesting exception
handlers?

Using bare excepts is almost never a good idea.  If it works you get
no clues what went wrong.  For example, a typo in source code can
trigger a bare exception, as can a user typing Ctrl-C.   So when you're
using bare excepts, you have robbed the user of any way to terminate the
program.

If I were you, I'd be writing a loop so there's only one try block.  Too
much duplicated code in the way you're doing it.



-- 

DaveA

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Checking for dlls in ctypes

2012-10-12 Thread MRAB

On 2012-10-12 16:36, Wanderer wrote:

I'm trying to write some code that will load one of three dll depending on the 
one available. I've tried the code below, but it doesn't work. The try except 
doesn't catch the exception. Is there a way to do this?

 try:
 self.dll = windll.pvcam64
 except:
 print No pvcam64
 try:
 self.dll = windll.pvcam32
 except:
 print No pvcam32
 try:
 self.dll = windll.pvcam
 except:
 print No pvcam
 return
 else:
 print installed pvcam
 else:
 print installed pvcam32
 else:
 print installed pvcam64


This works for me:

for name in (pvcam64, pvcam32, pvcam):
try:
self.dll = getattr(windll, name)
except OSError:
print No  + name
else:
print Installed  + name
return

--
http://mail.python.org/mailman/listinfo/python-list


Re: Checking for dlls in ctypes

2012-10-12 Thread Wanderer
On Friday, October 12, 2012 12:57:06 PM UTC-4, MRAB wrote:
 On 2012-10-12 16:36, Wanderer wrote:
 
  I'm trying to write some code that will load one of three dll depending on 
  the one available. I've tried the code below, but it doesn't work. The try 
  except doesn't catch the exception. Is there a way to do this?
 
 
 
   try:
 
   self.dll = windll.pvcam64
 
   except:
 
   print No pvcam64
 
   try:
 
   self.dll = windll.pvcam32
 
   except:
 
   print No pvcam32
 
   try:
 
   self.dll = windll.pvcam
 
   except:
 
   print No pvcam
 
   return
 
   else:
 
   print installed pvcam
 
   else:
 
   print installed pvcam32
 
   else:
 
   print installed pvcam64
 
 
 
 This works for me:
 
 
 
  for name in (pvcam64, pvcam32, pvcam):
 
  try:
 
  self.dll = getattr(windll, name)
 
  except OSError:
 
  print No  + name
 
  else:
 
  print Installed  + name
 
  return

Yes that works for me, too. Thanks
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Checking for dlls in ctypes

2012-10-12 Thread Wanderer
On Friday, October 12, 2012 12:29:02 PM UTC-4, Dave Angel wrote:
 On 10/12/2012 11:36 AM, Wanderer wrote:
 
  I'm trying to write some code that will load one of three dll depending on 
  the one available. I've tried the code below, but it doesn't work. The try 
  except doesn't catch the exception. Is there a way to do this?
 
 
 
  try:
 
  self.dll = windll.pvcam64
 
  except:
 
  print No pvcam64
 
  try:
 
  self.dll = windll.pvcam32
 
  except:
 
  print No pvcam32
 
  try:
 
  self.dll = windll.pvcam
 
  except:
 
  print No pvcam
 
  return
 
  else:
 
  print installed pvcam
 
  else:
 
  print installed pvcam32
 
  else:
 
  print installed pvcam64
 
 
 
 
 
 I can't help you find the dll's, because I don't run Windows.  But I
 
 could help you write a clearer question:
 
 
 
 doesn't work is thoroughly useless for describing errors.  If you're
 
 getting an exception, show us the full traceback.  That will show which
 
 statement got the exception that wasn't caught.  Next question is which
 
 of the dlls is missing.  Are you getting an exception because it's
 
 missing or because of something more fundamental, like nesting exception
 
 handlers?
 
 
 
 Using bare excepts is almost never a good idea.  If it works you get
 
 no clues what went wrong.  For example, a typo in source code can
 
 trigger a bare exception, as can a user typing Ctrl-C.   So when you're
 
 using bare excepts, you have robbed the user of any way to terminate the
 
 program.
 
 
 
 If I were you, I'd be writing a loop so there's only one try block.  Too
 
 much duplicated code in the way you're doing it.
 
 
 
 
 
 
 
 -- 
 
 
 
 DaveA

Sorry. It was a WindowsError, but the code I posted now works for me and I 
can't reproduce the problem. I'll be more diligent in the future.
-- 
http://mail.python.org/mailman/listinfo/python-list