@@ -305,9 +305,26 @@ def visit_name_expr(self, node: NameExpr) -> str:
305305 def visit_member_expr (self , o : MemberExpr ) -> str :
306306 return self ._visit_ref_expr (o )
307307
308- def visit_str_expr (self , node : StrExpr ) -> str :
308+ def _visit_literal_node (
309+ self , node : StrExpr | BytesExpr | IntExpr | FloatExpr | ComplexExpr
310+ ) -> str :
309311 return repr (node .value )
310312
313+ def visit_str_expr (self , node : StrExpr ) -> str :
314+ return self ._visit_literal_node (node )
315+
316+ def visit_bytes_expr (self , node : BytesExpr ) -> str :
317+ return f"b{ self ._visit_literal_node (node )} "
318+
319+ def visit_int_expr (self , node : IntExpr ) -> str :
320+ return self ._visit_literal_node (node )
321+
322+ def visit_float_expr (self , node : FloatExpr ) -> str :
323+ return self ._visit_literal_node (node )
324+
325+ def visit_complex_expr (self , node : ComplexExpr ) -> str :
326+ return self ._visit_literal_node (node )
327+
311328 def visit_index_expr (self , node : IndexExpr ) -> str :
312329 base_fullname = self .stubgen .get_fullname (node .base )
313330 if base_fullname == "typing.Union" :
@@ -805,7 +822,8 @@ def get_base_types(self, cdef: ClassDef) -> list[str]:
805822 for name , value in cdef .keywords .items ():
806823 if name == "metaclass" :
807824 continue # handled separately
808- base_types .append (f"{ name } ={ value .accept (p )} " )
825+ processed_value = value .accept (p ) or "..." # at least, don't crash
826+ base_types .append (f"{ name } ={ processed_value } " )
809827 return base_types
810828
811829 def get_class_decorators (self , cdef : ClassDef ) -> list [str ]:
0 commit comments