From 185980b30fd3646cafb96914aded13a09147720f Mon Sep 17 00:00:00 2001 From: EterIll Date: Mon, 1 Jun 2026 02:02:53 +0000 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=E3=80=8Cweek12=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week12/continueanyway.py | 9 +++++++++ week12/ex1.py | 24 ++++++++++++++++++++++++ week12/ex2.py | 18 ++++++++++++++++++ week12/ex3.py | 21 +++++++++++++++++++++ week12/ex4.py | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 week12/continueanyway.py create mode 100644 week12/ex1.py create mode 100644 week12/ex2.py create mode 100644 week12/ex3.py create mode 100644 week12/ex4.py diff --git a/week12/continueanyway.py b/week12/continueanyway.py new file mode 100644 index 0000000..b94f67c --- /dev/null +++ b/week12/continueanyway.py @@ -0,0 +1,9 @@ +from sys import stderr + +def ca(fn): + def call(*args,**kwargs): + try: + fn(*args,**kwargs) + except Exception as e: + print(type(e).__name__,":",e,file=stderr) + return call \ No newline at end of file diff --git a/week12/ex1.py b/week12/ex1.py new file mode 100644 index 0000000..b379d7f --- /dev/null +++ b/week12/ex1.py @@ -0,0 +1,24 @@ +def handleZeroDivisionError(lmbd): + def runlambda(*args,**kwargs): + try: + return lmbd(*args,**kwargs) + except ZeroDivisionError: + print("Zero division detected!") + return runlambda + +# usage: handleZeroDivisionError(lambda)() +# or: + +@handleZeroDivisionError +def div(a,b): + return a/b + +def main(): + print(handleZeroDivisionError(lambda:1/0)()) + print(handleZeroDivisionError(lambda:1/1)()) + print(div(1,0)) + print(div(1,1)) + return 0 + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/week12/ex2.py b/week12/ex2.py new file mode 100644 index 0000000..057e954 --- /dev/null +++ b/week12/ex2.py @@ -0,0 +1,18 @@ +from continueanyway import ca + +@ca +def ValidateInteger(i): + if type(i)==int: + print(f"{i} is a valid int") + return i + raise ValueError(f"The given number {i} is not a int") + +def main(): + ValidateInteger("10") + ValidateInteger(10.0) + ValidateInteger("dshjkfsdjhfkjsd") + ValidateInteger(10) + return 0 + +if __name__ == '__main__': + main() diff --git a/week12/ex3.py b/week12/ex3.py new file mode 100644 index 0000000..d2bbe58 --- /dev/null +++ b/week12/ex3.py @@ -0,0 +1,21 @@ +try:from decimal import Decimal +except:Decimal = float +from continueanyway import ca + +@ca +def ValidateNumerical(i): + try: + ii = Decimal(i) + print(f"{i} is a valid number") + return ii + except:raise TypeError(f"The given {i} is not a number") + +def main(): + ValidateNumerical("10") + ValidateNumerical(10.0) + ValidateNumerical("dshjkfsdjhfkjsd") + ValidateNumerical(10) + return 0 + +if __name__ == '__main__': + main() diff --git a/week12/ex4.py b/week12/ex4.py new file mode 100644 index 0000000..d00c9e8 --- /dev/null +++ b/week12/ex4.py @@ -0,0 +1,32 @@ +from continueanyway import ca + +def handleIndexError(lmbd): + def runlambda(*args,**kwargs): + try: + return lmbd(*args,**kwargs) + except IndexError: + print("IndexError detected!") + return runlambda + +class listIE(list): + def __init__(self, iterable): + super().__init__(iterable) + + @handleIndexError + def __getattribute__(self, name): + return super().__getattribute__(name) + + @handleIndexError + def __getitem__(self, s): + return super().__getitem__(s) + +def main(): + l1 = listIE([1,2,3]) + print(l1[1]) + print(l1[2]) + print(l1[3]) + + return 0 + +if __name__ == '__main__': + main()