GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — pythonnet/src/embed_tests/TestPythonException.cs at master · pythonnet/pythonnet Expand file tree/ Copy pathTestPythonException.csMore file actions 168 lines (149 loc) · 5.53 KB / Copy pathTestPythonException.csFile metadata and controls168 lines (149 loc) · 5.53 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 using System; using NUnit.Framework; using Python.Runtime; namespace Python.EmbeddingTest { public class TestPythonException { [Test] public void TestMessage() { var list = new PyList(); PyObject foo = null; var ex = Assert.Throws<PythonException>(() => foo = list[0]); Assert.That(ex.Message, Is.EqualTo("list index out of range")); Assert.IsNull(foo); } [Test] public void TestType() { var list = new PyList(); PyObject foo = null; var ex = Assert.Throws<PythonException>(() => foo = list[0]); Assert.That(ex.Type.Name, Is.EqualTo("IndexError")); Assert.IsNull(foo); } [Test] public void TestNoError() { // There is no PyErr to fetch Assert.Throws<InvalidOperationException>(() => PythonException.FetchCurrentRaw()); var currentError = PythonException.FetchCurrentOrNullRaw(); Assert.IsNull(currentError); } [Test] public void TestNestedExceptions() { try { PythonEngine.Exec(@" try: raise Exception('inner') except Exception as ex: raise Exception('outer') from ex "); } catch (PythonException ex) { Assert.That(ex.InnerException, Is.InstanceOf<PythonException>()); Assert.That(ex.InnerException.Message, Is.EqualTo("inner")); } } [Test] public void InnerIsEmptyWithNoCause() { var list = new PyList(); PyObject foo = null; var ex = Assert.Throws<PythonException>(() => foo = list[0]); Assert.IsNull(ex.InnerException); } [Test] public void TestPythonExceptionFormat() { try { PythonEngine.Exec("raise ValueError('Error!')"); Assert.Fail("Exception should have been raised"); } catch (PythonException ex) { // Console.WriteLine($"Format: {ex.Format()}"); // Console.WriteLine($"Stacktrace: {ex.StackTrace}"); Assert.That( ex.Format(), Does.Contain("Traceback") .And.Contains("(most recent call last):") .And.Contains("ValueError: Error!") ); // Check that the stacktrace is properly formatted Assert.That( ex.StackTrace, Does.Not.StartWith("[") .And.Not.Contain("\\n") ); } } [Test] public void TestPythonExceptionFormatNoTraceback() { try { var module = PyModule.Import("really____unknown___module"); Assert.Fail("Unknown module should not be loaded"); } catch (PythonException ex) { // ImportError/ModuleNotFoundError do not have a traceback when not running in a script Assert.That(ex.Format(), Is.EqualTo(ex.StackTrace)); } } [Test] public void TestPythonExceptionFormatNormalized() { try { PythonEngine.Exec("a=b\n"); Assert.Fail("Exception should have been raised"); } catch (PythonException ex) { Assert.AreEqual("Traceback (most recent call last):\n File \"<string>\", line 1, in <module>\nNameError: name 'b' is not defined\n", ex.Format()); } } [Test] public void TestPythonException_PyErr_NormalizeException() { using (var scope = Py.CreateScope()) { scope.Exec(@" class TestException(NameError): def __init__(self, val): super().__init__(val) x = int(val)"); Assert.IsTrue(scope.TryGet("TestException", out PyObject type)); PyObject str = "dummy string".ToPython(); var typePtr = new NewReference(type.Reference); var strPtr = new NewReference(str.Reference); var tbPtr = new NewReference(Runtime.Runtime.None.Reference); Runtime.Runtime.PyErr_NormalizeException(ref typePtr, ref strPtr, ref tbPtr); using var typeObj = typePtr.MoveToPyObject(); using var strObj = strPtr.MoveToPyObject(); using var tbObj = tbPtr.MoveToPyObject(); // the type returned from PyErr_NormalizeException should not be the same type since a new // exception was raised by initializing the exception Assert.IsFalse(PythonReferenceComparer.Instance.Equals(type, typeObj)); // the message should now be the string from the throw exception during normalization Assert.That(strObj.ToString(), Is.EqualTo("invalid literal for int() with base 10: 'dummy string'")); } } [Test] public void TestPythonException_Normalize_ThrowsWhenErrorSet() { Exceptions.SetError(Exceptions.TypeError, "Error!"); var pythonException = PythonException.FetchCurrentRaw(); Exceptions.SetError(Exceptions.TypeError, "Another error"); Assert.Throws<InvalidOperationException>(() => pythonException.Normalize()); Exceptions.Clear(); } } } |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |