Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

24 Apr, 2024: Testing a new version of the Overboard here. If you have an issue post about it to rocksolid.nodes.help (I know. Everyone on Usenet has issues)


devel / comp.lang.python / Re: EAFP

SubjectAuthor
o Re: EAFPPeter Otten

1
Re: EAFP

<mailman.426.1652695519.20749.python-list@python.org>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18290&group=comp.lang.python#18290

  copy link   Newsgroups: comp.lang.python
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!not-for-mail
From: __pete...@web.de (Peter Otten)
Newsgroups: comp.lang.python
Subject: Re: EAFP
Date: Mon, 16 May 2022 12:05:14 +0200
Lines: 72
Message-ID: <mailman.426.1652695519.20749.python-list@python.org>
References: <dr0rik5hru4d406b3c66jpvu.1652459869283@email.android.com>
<173a2a9d-962f-0606-4750-562f9984118c@web.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
X-Trace: news.uni-berlin.de hrQZBsrfY4rXzkfVD+JlwQEOyelMYHP2mrb6zf9HwTlw==
Return-Path: <__peter__@web.de>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
reason="1024-bit key; unprotected key"
header.d=web.de header.i=@web.de header.b=PDEglQGU; dkim-adsp=pass;
dkim-atps=neutral
X-Spam-Status: OK 0.007
X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'def': 0.04; 'performing':
0.07; 'received:212.227': 0.07; 'delay': 0.09; 'else:': 0.09;
'fails': 0.09; 'filename': 0.16; 'from:addr:web.de': 0.16;
'message-id:@web.de': 0.16; 'received:212.227.15': 0.16;
'received:mout.web.de': 0.16; 'received:web.de': 0.16; 'well-
defined': 0.16; 'wrote:': 0.16; 'to:addr:python-list': 0.20;
'exception': 0.22; 'first,': 0.22; 'version': 0.23; 'received:de':
0.23; 'depends': 0.25; 'stuff': 0.25; 'header:User-Agent:1': 0.30;
'code,': 0.31; 'before.': 0.31; 'raise': 0.31; 'checks': 0.32;
'there': 0.33; 'same': 0.34; 'header:In-Reply-To:1': 0.34;
'following': 0.35; 'change': 0.36; 'received:192.168': 0.37;
'though': 0.37; 'two': 0.39; 'skip:o 10': 0.61; 'above': 0.62;
'received:212': 0.62; 'between': 0.63; 'becomes': 0.64; 'your':
0.64; 'skip:f 20': 0.75; 'distinction': 0.84; 'samsung': 0.91
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de;
s=dbaedf251592; t=1652695517;
bh=x72zLrWXh2ajYrA3lwLLpdZn7/TZ92BcmEFBXNjQmdU=;
h=X-UI-Sender-Class:Date:Subject:To:References:From:In-Reply-To;
b=PDEglQGUJ8Rui3B8W1tvsRjD9CYnBv2ZUzvah96vZETptINDrEj8XuszG/UJRTYpr
j2W+M8n9nyXm1m/Wrel84QJQvAUc79I8AOvDvL4ACdqZ4vudb0Jd5J8OnDBkhTkK/s
4PoKtKb+7c2yic8NYPglsMA5RX2mkZ3iGnql01No=
X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101
Thunderbird/91.9.0
Content-Language: en-US
In-Reply-To: <dr0rik5hru4d406b3c66jpvu.1652459869283@email.android.com>
X-Provags-ID: V03:K1:h8U9TcEzLy6PToSEuv3d73KAL1FLPz0BhCiMSPhT7Qafv0gkKz9
yPeyMkmyM1N8BWnQhuYM0xmHXWrR5S0DtHpRFyYi7Bk/CHLiNff9lMisqZ7w9gaWdeVHU6r
Xd4617Acbzx9VftkqiJodjiz4DKMvh5e4KHFTwdRqYpbv3Coz9NMRq/HQLR8yesQXzz1YLS
//8wzS3sdoBU6Sz402SNQ==
X-Spam-Flag: NO
X-UI-Out-Filterresults: notjunk:1;V03:K0:oiT4cU7tfCc=:4iEpBYzvxvEcCDHL8hgCV1
kO9iPaxy+Py/YHJDPPtumJ1vryRG/HjDnc9qz6yXJPsfo8kn/inem9l7i0jsWZl+fwo0AZQD7
xGO9TACEcOotgjh/oQ7/3rNZSq3uv2Vr8JB0ld65rvUU170R35yd+6yS2StPnIkQAlQOpv9NX
53XuI/vJQNt3vUF6R5aAw2do65ST/vsUB//59Ji2+HWtqTX7U1+nFRmXf6Tnc5H/SQQ7V+mdj
TsGMYBFTl+Dt5IvgYLUzpHMzJRLIoma9whA2dioylYKfksib9t6RvWwYUmOJDCUyY4l/6aFqF
7d8Jay8QuiKMb2Mnu0dsVL4gszvJ3YcDHOVM31cKVcWtAb9BUSP+2qiexM65PhtagC/D7a4Id
Kd7xmRVHPPZJ8s3109YNCAGo/ulLaKGExvMaWpDcYbbOGnyS2vqj9qQvUUEAq6tuTVnSZUM+I
SvVykgcTK2mmx6+hWL+y9lUoK1bF90YfXUeDkzF5TmQkryl/4oVauxSmBI/VrLtDWDruk7V5v
JUSWQQG3zSQtIdpu+zmUUwJ7IuRs5BWKpAvfgZJNRV0idc91dGKbqkBqYc5mf92lhXzHgOVzE
qisjuDg4QNoJ+5Evcme9NOwJCHLQbXsZKHED+SGFZZV1PLHIRyFWonO7mNfIT+fXbbol+V4XD
LeBofpzbZ6N7CHNuuRJM0/8IEiRX/7ACOki0c2BpmWmvHhuyEwTc2Yz7nV4ZJ3XWYk0uGgSjy
EWVON6+lZRGp+HGyG/3XY7R11tyAsI+PObLHamSC7rUBk0+5r8rXCRRaHmFEvh2Kx/yVle8k+
MfkRUqYjARmf6ZWMEWFiWp6omqh1kP9eT4YwW/60PhQquLRZPip7cgX/cw+n5nKZdmoHHI5m+
PMSZHQLeRVG4MZloA4uxJfS+s70JetGW4dficnAqgE9Y+Ol/sOfuD0SxhnkxwTo8pB5ujbl3w
mixr62TSBlL6RIeyLLQiir5sNy4zKX18GmrYmNuOfRSxHm2vDuQWMAahuCqS3axF1V2IHFNDK
MFEdYz+VIdz9ziW6n5r3q/Elu/owFXSS4FERFIeZsCo4A3s1noGAVECejrBvCuawgfOGJQ7eu
npAW69Gb54m0yqFVoVAWFhs1nlljvXhJOjFvqC7CkI6XBvLyYiIYBd0GytQx7WshqMsKdBNtu
2qcZdhkz0dC+alAzVE4dE6KNjC1c/hJd30kWv2woT3RukF8AKWnQNZfW4O7xwn5x2Qm5V5QVl
F91CAGtR6BLph5JrYP01UrBlbq4RnoiJSKeBn5Q==
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: General discussion list for the Python programming language
<python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
<mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
<mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <173a2a9d-962f-0606-4750-562f9984118c@web.de>
X-Mailman-Original-References: <dr0rik5hru4d406b3c66jpvu.1652459869283@email.android.com>
 by: Peter Otten - Mon, 16 May 2022 10:05 UTC

On 13/05/2022 18:37, bryangan41 wrote:
> Is the following LBYL:foo = 123if foo < 200:    do()If so, how to change to EAFP?Thanks!Sent from Samsung tablet.

The distinction between look-before-you-leap and
easier-to-ask-forgiveness-than-permission is weaker than yo might expect.

When you write

filename = ...
if exists(filename):
with open(filename) as instream:
# do stuff
else:
# fallback

there are two checks for the file's existence, one explicit, and one
implicitly inside open() -- and worse, the first, explicit, check is
unreliable because between exists() and open() there is a small delay
that may be sufficient to create or delete the file. Therefore the
recommended (EAFP) version of the above is

filename = ...
try:
with open(filename) as instrem:
# do stuff
except FileNotFoundError
# fallback

or just

with open(filename) as instream:
# do stuff

if there is no meaningful fallback.

Regarding your example code, whether you can write an EAFP version for

if foo < 200:
do()

depends on the contents of do(). If do() fails in a well-defined way,
let's say by raising a FooAbove199 exception you can write just

do()

or, if you need a fallback

try:
do()
except FooAbove199:
# fallback

Note that if you change do() from

do():
# do stuff

to

def do():
if foo < 200:
# do stuff
else:
raise FooAbove199(f"Invalid {foo=!r}")

the

do()

invocation becomes EAFP even though you are actually performing the same
test as before.

1
server_pubkey.txt

rocksolid light 0.9.8
clearnet tor