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()