python how to raise Exception without breaking a while loop
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
lets say I have some event listener that suppose to run all the time and there is some exceptions that I want to pass them to the function caller something like that
import asyncio
_ = 0
async def listener(loop):
while True:
await asyncio.sleep(0.5)
if _ != 0:
raise ValueError('the _ is not 0 anymore!')
print('okay')
async def executor(loop):
while True:
x = await loop.run_in_executor(None, input, 'execute: ')
global _
_ = x
async def main(loop):
asyncio.ensure_future(listener(loop), loop=loop)
await executor(loop)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
if you gonna change the value the listener event loop will brake but I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
python-3.x asynchronous exception-handling python-asyncio
add a comment |
lets say I have some event listener that suppose to run all the time and there is some exceptions that I want to pass them to the function caller something like that
import asyncio
_ = 0
async def listener(loop):
while True:
await asyncio.sleep(0.5)
if _ != 0:
raise ValueError('the _ is not 0 anymore!')
print('okay')
async def executor(loop):
while True:
x = await loop.run_in_executor(None, input, 'execute: ')
global _
_ = x
async def main(loop):
asyncio.ensure_future(listener(loop), loop=loop)
await executor(loop)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
if you gonna change the value the listener event loop will brake but I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
python-3.x asynchronous exception-handling python-asyncio
add a comment |
lets say I have some event listener that suppose to run all the time and there is some exceptions that I want to pass them to the function caller something like that
import asyncio
_ = 0
async def listener(loop):
while True:
await asyncio.sleep(0.5)
if _ != 0:
raise ValueError('the _ is not 0 anymore!')
print('okay')
async def executor(loop):
while True:
x = await loop.run_in_executor(None, input, 'execute: ')
global _
_ = x
async def main(loop):
asyncio.ensure_future(listener(loop), loop=loop)
await executor(loop)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
if you gonna change the value the listener event loop will brake but I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
python-3.x asynchronous exception-handling python-asyncio
lets say I have some event listener that suppose to run all the time and there is some exceptions that I want to pass them to the function caller something like that
import asyncio
_ = 0
async def listener(loop):
while True:
await asyncio.sleep(0.5)
if _ != 0:
raise ValueError('the _ is not 0 anymore!')
print('okay')
async def executor(loop):
while True:
x = await loop.run_in_executor(None, input, 'execute: ')
global _
_ = x
async def main(loop):
asyncio.ensure_future(listener(loop), loop=loop)
await executor(loop)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
if you gonna change the value the listener event loop will brake but I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
python-3.x asynchronous exception-handling python-asyncio
python-3.x asynchronous exception-handling python-asyncio
asked Nov 23 '18 at 18:56
dsal3389dsal3389
127112
127112
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
If you want to raise the error but keep going, then the listener shouldn't raise directly. Instead, it should signal the exception to the interesting parties using a Future object. Instead of awaiting the executor, main() should await the broadcast future in a loop:
import asyncio
_ = 0
broadcast = None
async def listener():
while True:
await asyncio.sleep(0.5)
if _ != 0:
broadcast.set_exception(ValueError('the _ is not 0 anymore!'))
else:
print('okay')
async def executor():
loop = asyncio.get_event_loop()
while True:
x = int(await loop.run_in_executor(None, input, 'execute: '))
global _
_ = x
async def main():
global broadcast
loop = asyncio.get_event_loop()
loop.create_task(listener())
loop.create_task(executor())
while True:
broadcast = loop.create_future()
try:
await broadcast
except ValueError as e:
print('got error', e)
asyncio.get_event_loop().run_until_complete(main())
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53451747%2fpython-how-to-raise-exception-without-breaking-a-while-loop%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
If you want to raise the error but keep going, then the listener shouldn't raise directly. Instead, it should signal the exception to the interesting parties using a Future object. Instead of awaiting the executor, main() should await the broadcast future in a loop:
import asyncio
_ = 0
broadcast = None
async def listener():
while True:
await asyncio.sleep(0.5)
if _ != 0:
broadcast.set_exception(ValueError('the _ is not 0 anymore!'))
else:
print('okay')
async def executor():
loop = asyncio.get_event_loop()
while True:
x = int(await loop.run_in_executor(None, input, 'execute: '))
global _
_ = x
async def main():
global broadcast
loop = asyncio.get_event_loop()
loop.create_task(listener())
loop.create_task(executor())
while True:
broadcast = loop.create_future()
try:
await broadcast
except ValueError as e:
print('got error', e)
asyncio.get_event_loop().run_until_complete(main())
add a comment |
I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
If you want to raise the error but keep going, then the listener shouldn't raise directly. Instead, it should signal the exception to the interesting parties using a Future object. Instead of awaiting the executor, main() should await the broadcast future in a loop:
import asyncio
_ = 0
broadcast = None
async def listener():
while True:
await asyncio.sleep(0.5)
if _ != 0:
broadcast.set_exception(ValueError('the _ is not 0 anymore!'))
else:
print('okay')
async def executor():
loop = asyncio.get_event_loop()
while True:
x = int(await loop.run_in_executor(None, input, 'execute: '))
global _
_ = x
async def main():
global broadcast
loop = asyncio.get_event_loop()
loop.create_task(listener())
loop.create_task(executor())
while True:
broadcast = loop.create_future()
try:
await broadcast
except ValueError as e:
print('got error', e)
asyncio.get_event_loop().run_until_complete(main())
add a comment |
I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
If you want to raise the error but keep going, then the listener shouldn't raise directly. Instead, it should signal the exception to the interesting parties using a Future object. Instead of awaiting the executor, main() should await the broadcast future in a loop:
import asyncio
_ = 0
broadcast = None
async def listener():
while True:
await asyncio.sleep(0.5)
if _ != 0:
broadcast.set_exception(ValueError('the _ is not 0 anymore!'))
else:
print('okay')
async def executor():
loop = asyncio.get_event_loop()
while True:
x = int(await loop.run_in_executor(None, input, 'execute: '))
global _
_ = x
async def main():
global broadcast
loop = asyncio.get_event_loop()
loop.create_task(listener())
loop.create_task(executor())
while True:
broadcast = loop.create_future()
try:
await broadcast
except ValueError as e:
print('got error', e)
asyncio.get_event_loop().run_until_complete(main())
I dont want it to break I want it to raise the error so you will be able to catch it and the loop to keep going
If you want to raise the error but keep going, then the listener shouldn't raise directly. Instead, it should signal the exception to the interesting parties using a Future object. Instead of awaiting the executor, main() should await the broadcast future in a loop:
import asyncio
_ = 0
broadcast = None
async def listener():
while True:
await asyncio.sleep(0.5)
if _ != 0:
broadcast.set_exception(ValueError('the _ is not 0 anymore!'))
else:
print('okay')
async def executor():
loop = asyncio.get_event_loop()
while True:
x = int(await loop.run_in_executor(None, input, 'execute: '))
global _
_ = x
async def main():
global broadcast
loop = asyncio.get_event_loop()
loop.create_task(listener())
loop.create_task(executor())
while True:
broadcast = loop.create_future()
try:
await broadcast
except ValueError as e:
print('got error', e)
asyncio.get_event_loop().run_until_complete(main())
answered Nov 23 '18 at 23:23
user4815162342user4815162342
64.8k596151
64.8k596151
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53451747%2fpython-how-to-raise-exception-without-breaking-a-while-loop%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown