| 2327 | #[pymethod] |
| 2328 | fn __str__(zelf: &Py<PyBaseException>, vm: &VirtualMachine) -> PyResult<PyStrRef> { |
| 2329 | fn basename(filename: &Wtf8) -> &Wtf8 { |
| 2330 | let bytes = filename.as_bytes(); |
| 2331 | let pos = if cfg!(windows) { |
| 2332 | bytes.iter().rposition(|&b| b == b'/' || b == b'\\') |
| 2333 | } else { |
| 2334 | bytes.iter().rposition(|&b| b == b'/') |
| 2335 | }; |
| 2336 | match pos { |
| 2337 | // SAFETY: splitting at ASCII byte boundary preserves WTF-8 validity |
| 2338 | Some(pos) => unsafe { Wtf8::from_bytes_unchecked(&bytes[pos + 1..]) }, |
| 2339 | None => filename, |
| 2340 | } |
| 2341 | } |
| 2342 | |
| 2343 | let maybe_lineno = zelf |
| 2344 | .as_object() |