Обработка исключений в Tkinter - PullRequest
1 голос
/ 14 апреля 2020
class Application(object):
    def __init__(self, master):
        self.master = master
        Tk.report_callback_exception = self.show_error

    def show_error(self, *args):
        err = traceback.format_exception(*args)
        messagebox.showerror('Title', f"{err[-1]}")

При возникновении исключения у меня будет что-то вроде этого:

ZeroDivisionError

Если создать простое Исключение Класса из Исключения в легко передать описание:

class Pingu_Exception(Exception):
    pass

, если я за исключением ZeroDivisionError и поднять мою ошибку (Pingu_Exception) из импортированного python файла, я могу легко его перехватить

try:
        x = 4 / 0
except ZeroDivisionError:
        raise Pingu_Exception("Description")

Pingu_Exception

Проблема в том, когда я пытаюсь поймать импортированное исключение. Например:

from requests.exceptions import ReadTimeout


class Woocommerce_api(object):
    def __init__(self):
        self.orders_endpoint = "orders/"
        self.customers_endpoint = "customers/"
        self.products_endpoint = "products/"

    def __api_json(self, endpoint):

        try:
            wcapi = API(
                url="https://www.xxxx.it",
                consumer_key=self.consumer_key,
                consumer_secret=self.consumer_secret,
                wp_api=True,
                version="wc/v1",
                query_string_auth=True,
                timeout=3
            )
            return wcapi

        except requests.exceptions.ReadTimeout:
            raise Pingu_Exception('"Timeout error\nIl server non risponde\nRiprova nuovamente')

Это то, что я ловлю:

request exception

, но при попытке поднять request.exceptions. ReadTimeout, в своей же функции он будет работать:

def __api_json(self, endpoint):
    try:
        raise requests.exceptions.ReadTimeout

        wcapi = API(
            url="https://www.slow-sud.it",
            consumer_key=self.consumer_key,
            consumer_secret=self.consumer_secret,
            wp_api=True,
            version="wc/v1",
            query_string_auth=True,
            timeout=3
        )
        return wcapi
except requests.exceptions.ReadTimeout:
        raise Pingu_Exception('"Timeout error\nIl server non risponde\nRiprova nuovamente')
        return False

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...