I have a general question of Python style, or perhaps just good
programming practice.
My group is developing a medium-sized library of general-purpose
Python functions, some of which do I/O. Therefore it is possible for
many of the library functions to raise IOError Exceptions. The
question is: should the library function be able to just dump to
sys.exit() with a message about the error (like "couldn't open this
file"), or should the exception propagate to the calling program which
handles the issue?
Thanks in advance for anyone who can either answer my question or
point me to where this question has already been answered.
Sep 23 '08
34 5045
On 2008-09-24, Steven D'Aprano <st****@REMOVE. THIS.cybersourc e.com.auwrote:
On Tue, 23 Sep 2008 13:25:26 -0700, Drake wrote:
>I have a general question of Python style, or perhaps just good programming practice.
My group is developing a medium-sized library of general-purpose Python functions, some of which do I/O. Therefore it is possible for many of the library functions to raise IOError Exceptions. The question is: should the library function be able to just dump to sys.exit() with a message about the error (like "couldn't open this file"), or should the exception propagate to the calling program which handles the issue?
Thanks in advance for anyone who can either answer my question or point me to where this question has already been answered.
Presumably somebody has suggested that calling sys.exit() was a good
option. I'm curious to what possible reason they could give for such a
poor choice.
Same here. It's like an automotive engine controls designer
asking if a failed O2 sensor should turn on the check engine
light or blow up the car.
--
Grant Edwards grante Yow! Mr and Mrs PED, can I
at borrow 26.7% of the RAYON
visi.com TEXTILE production of the
INDONESIAN archipelago?
2008/9/24 Bruno Desthuilliers <br************ ********@websit eburo.invalid>:
Drake a écrit :
>many of the library functions to raise IOError Exceptions. The question is: should the library function be able to just dump to sys.exit() with a message about the error (like "couldn't open this file"),
Arrghll ! NO, DONT !
Can I put in a vote *for* the questioner's library dumping to
sys.exit() on any abnormal condition? It would reduce employment
competition for the rest of us.
Why, yes, I am wearing my BOFH hat. How could you tell?
--
Tim Rowe
Steven D'Aprano <st****@REMOVE. THIS.cybersourc e.com.auwrote:
Presumably somebody has suggested that calling sys.exit() was a good
option. I'm curious to what possible reason they could give for such a
poor choice.
Grant Edwards <invalid@invali dwrote:
>Same here. It's like an automotive engine controls designer asking if a failed O2 sensor should turn on the check engine light or blow up the car.
No, it's more like asking if the failed sensor should turn on a strange
and mysterious light on the dashboard and then blow up the car if the
driver doesn't immediately stop and check the engine. The owners manual
would only vaguely hint at the fact that this could happen.
Ross Ridge
--
l/ // Ross Ridge -- The Great HTMU
[oo][oo] rr****@csclub.u waterloo.ca
-()-/()/ http://www.csclub.uwaterloo.ca/~rridge/
db //
On 2008-09-24, Ross Ridge <rr****@csclub. uwaterloo.cawro te:
Steven D'Aprano <st****@REMOVE. THIS.cybersourc e.com.auwrote:
>Presumably somebody has suggested that calling sys.exit() was a good option. I'm curious to what possible reason they could give for such a poor choice.
Grant Edwards <invalid@invali dwrote:
>>Same here. It's like an automotive engine controls designer asking if a failed O2 sensor should turn on the check engine light or blow up the car.
No, it's more like asking if the failed sensor should turn on
a strange and mysterious light on the dashboard
You're right. I had forgotten that sys.exit() is actually
raising the system exit exception, and that the application
calling the library could handle that exception.
and then blow up the car if the driver doesn't immediately
stop and check the engine. The owners manual would only
vaguely hint at the fact that this could happen.
--
Grant Edwards grante Yow! Why is it that when
at you DIE, you can't take
visi.com your HOME ENTERTAINMENT
CENTER with you??
Steven D'Aprano <st****@REMOVE. THIS.cybersourc e.com.auwrote:
Presumably somebody has suggested that calling sys.exit() was a good
option. I'm curious to what possible reason they could give for such a
poor choice.
Grant Edwards <invalid@invali dwrote:
>Same here. It's like an automotive engine controls designer asking if a failed O2 sensor should turn on the check engine light or blow up the car.
Ross Ridge <rr****@csclub. uwaterloo.cawro te:
No, it's more like asking if the failed sensor should turn on
a strange and mysterious light on the dashboard
Grant Edwards <invalid@invali dwrote:
>You're right. I had forgotten that sys.exit() is actually raising the system exit exception, and that the application calling the library could handle that exception.
Well, my point was that exceptions in Python are a bit like a car's
check engine light. Few drivers know what this mysterious light means,
and aren't prepared to do anything about it when it goes on.
Ross Ridge
--
l/ // Ross Ridge -- The Great HTMU
[oo][oo] rr****@csclub.u waterloo.ca
-()-/()/ http://www.csclub.uwaterloo.ca/~rridge/
db //
Grant Edwards <invalid@invali dwrote:
Same here. It's like an automotive engine controls designer
asking if a failed O2 sensor should turn on the check engine
light or blow up the car.
Ross Ridge <rr****@csclub. uwaterloo.cawro te:
No, it's more like asking if the failed sensor should turn on
a strange and mysterious light on the dashboard
Grant Edwards <invalid@invali dwrote:
You're right. I had forgotten that sys.exit() is actually
raising the system exit exception, and that the application
calling the library could handle that exception.
Ross Ridge a écrit :
Well, my point was that exceptions in Python are a bit like a car's
check engine light. Few drivers know what this mysterious light means,
and aren't prepared to do anything about it when it goes on.
Bruno Desthuilliers <bd************ *****@free.quel quepart.frwrote :
>You're kidding, aren't you ?
Of course not. Plenty of people were quick to say that the exception
should be passed through to the caller. No one said this behaviour
should be documented. There may be little practical difference bewteen
calling sys.exit() after printing an error and progating an exception
if no one using the library knows that it could generate that exception
in those circumstances.
Ross Ridge
--
l/ // Ross Ridge -- The Great HTMU
[oo][oo] rr****@csclub.u waterloo.ca
-()-/()/ http://www.csclub.uwaterloo.ca/~rridge/
db //
Why, yes, I am wearing my BOFH hat. How could you tell?
--
Tim Rowe
evil, but I think you may be a BSEFH, not a BOFH.
On Wed, 24 Sep 2008 10:54:40 -0500, Grant Edwards wrote:
You're right. I had forgotten that sys.exit() is actually raising the
system exit exception, and that the application calling the library
could handle that exception.
Could but shouldn't.
The exception hierarchy was re-designed in Python 2.5 specifically so
that SystemExit and KeyboardInterru pt no longer inherit from Exception.
That means this will do the right thing:
try:
process(record)
if changed:
update(record)
except Exception:
# don't write the record if any error occurs
pass
Neither SystemExit nor KeyboardInterru pt are errors, and they should not
be treated as errors. I quote from the Fine Manual:
[SystemExit] inherits from BaseException instead of StandardError or
Exception so that it is not accidentally caught by code that catches
Exception. This allows the exception to properly propagate up and cause
the interpreter to exit. http://docs.python.org/lib/module-exceptions.html
SystemExit is not an error. KeyboardInterru pt is not an error. Libraries
should not use SystemExit to signal an error any more than they should
use MemoryError to signal a missing attribute.
Whether or not an application exits is up to the application to decide,
not the library it wraps. Libraries should report errors by raising an
Exception (note the capital E), and the application should decide whether
or not it is recoverable, and if not, exit (perhaps by simply not
catching the exception).
--
Steven
On Wed, 24 Sep 2008 17:11:28 -0400, Ross Ridge wrote:
Plenty of people were quick to say that the exception should be passed
through to the caller. No one said this behaviour should be documented.
There may be little practical difference bewteen calling sys.exit()
after printing an error and progating an exception if no one using the
library knows that it could generate that exception in those
circumstances.
That's true, I didn't explicitly say that the library should be
documented. Nor did I say that it shouldn't be riddled with bugs. There's
little practical difference between a buggy library and one that raises
unexpected (i.e. undocumented) exceptions either.
--
Steven
Steven D'Aprano a écrit :
On Wed, 24 Sep 2008 17:11:28 -0400, Ross Ridge wrote:
>Plenty of people were quick to say that the exception should be passed through to the caller. No one said this behaviour should be documented. There may be little practical difference bewteen calling sys.exit() after printing an error and progating an exception if no one using the library knows that it could generate that exception in those circumstance s.
That's true, I didn't explicitly say that the library should be
documented. Nor did I say that it shouldn't be riddled with bugs. There's
little practical difference between a buggy library and one that raises
unexpected (i.e. undocumented) exceptions either.
Also note that there are quite a couples cases where the library authors
themselves cannot predict which exception types may be raised - as soon
as the library functions expect callback functions, file-like or
dict-like or whatever-like objects etc, it's the caller's responsability
to handle the exceptions that may be raised by what *he* passes to the
library... This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: robert |
last post by:
When employing complex UI libs (wx, win32ui, ..) and other extension
libs, nice "only Python stack traces" remain a myth.
Currently I'm hunting again a rare C-level crash bug of a Python based
Windows app with rare user reports - and still in the dark (I get
snippets of machine stack traces / screenshots with random "mem. access
error" / "python caused the runtime to terminate in an unusual way" / ..)
I'd like to hook a kind of quality...
|
by: WaterWalk |
last post by:
I've just read an article "Building Robust System" by Gerald Jay
Sussman. The article is here:
http://swiss.csail.mit.edu/classes/symbolic/spring07/readings/robust-systems.pdf
In it there is a footprint which says:
"Indeed, one often hears arguments against building exibility into an
engineered sys-
tem. For example, in the philosophy of the computer language Python it
is claimed:
\There should be one|and preferably only one|obvious...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
| |
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |